В основном при отображении данных из базы данных 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) "<>'""
Я предполагаю, что ваша строка ввода поступает из Microsoft Word и содержит опечатки:
var_dump(htmlsan('“foo”')); // string(9) "“foo”"
Если вам нужно преобразовать их по какой-либо причине, вам нужно htmlentities()
а не htmlspecialchars()
:
var_dump(htmlentities('“foo”', ENT_QUOTES, 'UTF-8')); // string(17) "“foo”"
Хорошо, пришло время для правильного тестирования. Введите одну цитату ( '
) в поле базы данных 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) "'" string(2) "27" string(6) "'"
Пожалуйста, обновите свой вопрос и подтвердите, выполняли ли вы этот тест и получили тот же или другой результат.
Пожалуйста, внимательно ознакомьтесь с результатами, которые, как утверждается, вы получаете:
string(6) "'"
Это не строка с 6 символами. Вы не смотрите на реальный результат: вы смотрите на результат, отображаемый браузером. Я уверен, что вы получаете ожидаемый результат, т. string(6) "'"
, Если вы выполните рендеринг '
с веб-браузером он становится '
. Используйте меню « Просмотр источника» в своем браузере, чтобы увидеть реальный вывод.
Когда вы просматриваете исходный код с помощью 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");
Вероятно, вы сделаете то, что хотите.