Как вы это точно тестируете?
<?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”"
Обновление # 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) "'"
string(2) "27"
string(6) "'"
Пожалуйстаобновите свой вопрос и подтвердите, выполнили ли вы этот тест и получили тот же или другой вывод.
Update # 2
Пожалуйста, внимательно посмотрите на вывод, который, по вашему мнению, вы получаете:
string(6) "'"
Это , а не строка из 6 символов.Вы не смотрите на вывод real : вы смотрите на вывод как , визуализированный браузером.Я уверен, что вы получите ожидаемый результат, то есть string(6) "'"
.Если вы визуализируете '
с помощью веб-браузера, оно становится '
.Используйте View Source меню в вашем браузере, чтобы увидеть реальный результат.