Вопрос по функциии HTMLSPECIALCHARS

Bartman

Новичок
Вопрос по функциии HTMLSPECIALCHARS

Подскажите, плз...
я знаю, что ф-ю HTMLSPECIALCHARS следует использовать для фильтрации данных, введенных пользователем, до постинга их в БД.

Но у меня проблема: при подобной проверки (вводятся русские символы), а именно: $temp = htmlspecialchars($temp);
текст в базу записывается не русскими буквами, а символьными примитивами букв, т.е. пи и при выводе его в браузер, соот-но, тоже.

Почему такое происходит ? Если закомментировать эту строчку, останется:

$temp = trim($temp);
//$temp = htmlspecialchars($temp);
$temp = addslashes($temp);

и всё работает отлично! Как такое может быть ???
 

DiMA

php.spb.ru
Команда форума
1. удали из программы htmlentities()
2. юзать HTMLSPECIALCHARS нужно при показе из базы, а хранить в оригинале
 

Bartman

Новичок
Дмитрий, скажите пожалуйста: как htmlentities() сказывается на работу? Мне нужно хранить в базе тексты, содержащие французские спец. символы. Для этих полей я действительно использую htmlentities() - эта ф-я мне здорово помогает и "неправильные" символы для русской кодировки преобразует в символьные примитивы. Но не может же эта ф-я некорректно сказываться на другой текст, кот. я ввожу в БД!
Может быть, конечно, я что-то не понимаю, но, по крайней мере, я так думаю.

А по поводу Вашего второго комментария хочу спросить следующее: Вы говорите, что "текст нужно хранить в БД в оригинале, а юзать HTMLSPECIALCHARS нужно при показе из базы". А как же быть, если пользователь введёт " ' ' \ / & ^$`' ??? Такую инф-ю нельзя заносить в БД, предваритеьно её не обработав. По крайней мере все авторы книг по PHP настоятельно рекомендуют именно с помощью htmlspecialchars() фильтровать данные до постинга в БД.
 

gRigoriy

Новичок
Для таких символов есть addslashes и соответственно stripslashes!
 

Bartman

Новичок
Автор оригинала: gRigoriy
Для таких символов есть addslashes и соответственно stripslashes!
Скажите, пожалуйста, в каком случае тогда нужно использовать HTMLSPECIALCHARS () ???
 

gRigoriy

Новичок
Для того чтобы изолировать HTML теги ... ... Поэтому она так иназывается HTMLSPECIALCHARS!
 

Bartman

Новичок
Хорошо, а если пользователь вводит:
<b>Fran&#231;aise &#233;l&#232;ves</b> или <b>привет</b> ??? Как быть в таком случае ?

Сейчас я фильтрую данные след. образом:
$temp = trim($temp); // удаляю ведущие и конечные пробелы
$temp = htmlspecialchars($temp); // фильтрую HTML теги
$temp = addslashes($temp); // фильтрую " ' ` и прочее

если это поле только для ввода текста с фр. символами, то к указанному выше добавляю ещё:

$temp = htmlentities($temp); // заменяю фр. символы на символьные примитивы

но DiMA посоветовал : "1. удали из программы htmlentities()"

Мой вопрос: как использование этой ф-и для одного поля влияет на некорректное отображение русских букв в других полях, где я её не использую ???
 
Сверху