Преобразование специальных символов с помощью htmlspecialchars и htmlentities - PullRequest
2 голосов
/ 24 января 2011

Теперь я путаюсь с введением специальных символов в мою базу данных ...

Например, я хочу принимать такие символы, как ö, ù и т. Д., И я хочу отображать их в формате HTML, например Löic, что является французским именем.

И я подумал, что должен преобразовать эти специальные символы в HTML-объекты, прежде чем вводить их в базу данных, например ö для ö.

Если я использую htmlspecialchars() для их преобразования,

 Array
(
    [name] => Löic
)

if(isset($_POST['name'])) $name = preg_replace('/\s\s+/', ' ', trim($_POST['name']));
$name = htmlspecialchars($name, ENT_QUOTES);

Таким образом, он должен быть преобразован в Löic, но не преобразован вообще, а

.
Löic

Так вот, что я получаю, когда проверяю свою базу данных, она сохраняется как

Löic

Если я использую htmlentities() для их преобразования,

$name = htmlentities($name, ENT_QUOTES);

тогда я получу это,

Löic

и это отображается на моем html,

Löic

Почему он это делает ?? Моя голова взорвется! Я не знаю, где проблема. Пожалуйста, помогите ... Что мне сделать, чтобы исправить это?

Это связано с utf8_general_ci, который я установил в этом столбце имени?

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Также вы можете просто сделать:

$text = htmlspecialchars( $text );
$text = mysql_escape_string( $text );
1 голос
/ 24 января 2011

Это происходит потому, что вы пытаетесь конвертировать символы utf8 с помощью htmlentites.К сожалению, эта функция работает правильно только на ascii-символах.Самое простое решение - просто сохранить строки в таблице базы данных utf8 и вывести их только с htmlspecialchars вместо htmlentities.Просто убедитесь, что кодировка вашей страницы установлена ​​в utf8.

...