htmlspecialchars & ENT_QUOTES не работает?

В основном при отображении данных из базы данных MySQL у меня есть htmlspecialchars() ниже, которая должна конвертировать одиночные и двойные кавычки в их безопасные htmlspecialchars() . Проблема, с которой я сталкиваюсь, заключается в просмотре исходного кода, это только преобразование < > & когда мне также нужно преобразовать одиночные и двойные кавычки.

 //sanitize data from db before displaying on webpage function htmlsan($htmlsanitize){ return $htmlsanitize = htmlspecialchars($htmlsanitize, ENT_QUOTES, 'UTF-8'); } 

Затем, когда я хочу использовать, например, я:

 htmlsan($row['comment']); 

Может ли кто-нибудь сказать мне, почему он не конвертирует одиночные и двойные кавычки?

ОБНОВИТЬ

Странно, что htmlsan() используется для комментариев по электронной почте, и когда я просматриваю исходный код электронной почты, он преобразует их, кажется, что он не будет преобразовывать одиночные / двойные кавычки из базы данных при отображении на веб-странице. Моя настройка базы данных также установлена ​​на utf8_general_ci, и я объявляю, что использую utf8 для подключения к базе данных и т. Д.

Как вы его точно тестируете?

 <?php //sanitize data from db before displaying on webpage function htmlsan($htmlsanitize){ return $htmlsanitize = htmlspecialchars($htmlsanitize, ENT_QUOTES, 'UTF-8'); } var_dump(htmlsan('<>\'"')); 

… печатает:

 string(20) "&lt;&gt;&#039;&quot;" 

Я предполагаю, что ваша строка ввода поступает из Microsoft Word и содержит опечатки:

 var_dump(htmlsan('“foo”')); // string(9) "“foo”" 

Если вам нужно преобразовать их по какой-либо причине, вам нужно htmlentities() а не htmlspecialchars() :

 var_dump(htmlentities('“foo”', ENT_QUOTES, 'UTF-8')); // string(17) "&ldquo;foo&rdquo;" 

Обновление # 1

Хорошо, пришло время для правильного тестирования. Введите одну цитату ( ' ) в поле базы данных comment и запустите следующий код при ее получении:

 var_dump(bin2hex("'")); var_dump(htmlspecialchars("'", ENT_QUOTES, 'UTF-8')); var_dump(bin2hex($row['comment'])); var_dump(htmlspecialchars($row['comment'], ENT_QUOTES, 'UTF-8')); 

Он должен напечатать это:

 string(2) "27" string(6) "&#039;" string(2) "27" string(6) "&#039;" 

Пожалуйста, обновите свой вопрос и подтвердите, выполняли ли вы этот тест и получили тот же или другой результат.

Обновление # 2

Пожалуйста, внимательно ознакомьтесь с результатами, которые, как утверждается, вы получаете:

 string(6) "'" 

Это не строка с 6 символами. Вы не смотрите на реальный результат: вы смотрите на результат, отображаемый браузером. Я уверен, что вы получаете ожидаемый результат, т. string(6) "&#039;" , Если вы выполните рендеринг &#039; с веб-браузером он становится ' . Используйте меню « Просмотр источника» в своем браузере, чтобы увидеть реальный вывод.

Когда вы просматриваете исходный код с помощью Firebug, Firebug показывает его, как показывает его веб-браузер, я думал, что он показал бы исходный код так же, как если бы вы перешли к View Source в строке меню браузера. Головная боль узнала и запомнится. Спасибо всем за ваше драгоценное время и ввод.

Имела та же проблема. Моя база данных с utf-8_unicode_ci и моей html-кодировкой utf-8, а htmlentities только конвертировали все, кроме кавычек. Я думал, что такая же кодировка как в db, так и в html будет работать нормально, но это не так. Поэтому я изменил charset на html на iso-8859-1, и он сработал. Я не знаю почему, но это сработало. У моего db все еще есть utf-8_unicode_ci.

Не уверен, что это будет иметь значение, но вы попытались удалить $htmlsanitize .

 function htmlsan($htmlsanitize){ return htmlspecialchars($htmlsanitize, ENT_QUOTES, 'UTF-8'); } 

С помощью

 htmlentities($htmlsin, ENT_QUOTES, 'UTF-8'); 

или

 mb_convert_encoding($htmlsan, "HTML-ENTITIES", "UTF-8"); 

Вероятно, вы сделаете то, что хотите.