PHP htmlentities не работает даже с параметрами
конечно, это было задано раньше и искали решения, все которые до сих пор не работали. Я хочу изменить символ TM и амперсанд на их HTML-эквивеленты, используя htmlentities или htmlspecialchars:
$TEST = "Kold Locker™ & other stuff";
echo "ORGINIAL: " . $TEST . "<BR/>";
echo "HTML: " . htmlentities($TEST, ENT_COMPAT, 'UTF-8');
отображает:
ORGINIAL: Kold Locker™ & other stuff
HTML:
Я также пробовал это с htmlspecialchars и второй параметр изменяется с тем же результатом.
чего мне не хватает, чтобы другие утверждали, что работали в других решения?
обновление: я попытался просто отобразить utf8_encode($TEST) и это отображается HTML: Kold Locker™ & other stuff
4 ответов
ваш код работает для меня :-?
на страница руководства для htmlentities() мы можем прочитать:
Возвращаемые Значения
возвращает закодированную строку.
если входная строка содержит недопустимую последовательность кодовых единиц в заданная кодировка будет возвращена пустая строка, если только ENT_IGNORE или ENT_SUBSTITUTE флагов.
Я предполагаю, что входные данные не являются правильно в кодировке UTF-8, и функция возвращает пустую строку. (Предполагая, что сценарий не сбой, т. е. код после того, как эта часть все еще работает.)
Я не знаю, почему , это работает для меня (функция htmlentities должен быть вызван дважды для меня)
$html="<html> <head><head>something like this </html>"
$entities_correction= htmlentities( $html, ENT_COMPAT, 'UTF-8');
echo htmlentities( $entities_correction, ENT_COMPAT, 'UTF-8');
выход :
<html> <head><head>something like this </html>
Я думал, что у меня та же проблема, что и у Pjack (msg от 14 июля в 8: 54):
$str = "A 'quote' is <b>bold</b>";
echo htmlentities($str);
дает в браузере (Firefox в моем случае) исходную строку $str (без любой перевод), в то время как
echo htmlentities(htmlentities($str));
выдает:
A 'quote' is <b>bold</b>
(Я использую PHP / 5.4.16, полученный из windows-7 XAMPP).
однако после некоторых размышлений мне пришло в голову, что браузер показывает строки как > и <.>& и только тогда браузер показывает, что вы ожидали в первую очередь.
у меня была почти такая же проблема (в которой каким-то образом он показывал один и тот же текст каждый раз), и с комбинацией разных эхо я получил его. Кажется, что веб-браузеры, такие как firefox, каждый раз показывают один и тот же текст. Это потому, что когда вы echo htmlentities-text, его преобразование обратно в обычный текст во время Эха. Когда я Эхо скрипт с переменной/текст console.logged, он фактически повторяет текст htmlentities (почти) правильно. Вместо замены каждого специального char с html-кодировки, он заменяет их какой-то другой кодировкой, которую я уже видел раньше (я не могу вспомнить имя). Htmlentities-снова, я снова получаю тот же текст echod (помните, что он преобразует все), но повторяет его в консоли.журнал-версия дает мне ожидаемый результат. Теперь, опять же, в результате:
1. Выполнить htmlentities два раза!
2. не (по крайней мере с Firefox) Эхо htmlentities как обычно на странице. Если вы хотите проверить, правильно ли значение, Эхо-скрипт, который регистрирует его в консоли.
Я надеюсь, что это может помочь другим парням с той же проблемой,
VicStudio
редактировать: 3. Если вы используете $_POST formular, не забудьте добавить accept-charset="UTF-8" (или какая-то другая кодировка) в <form> тег.
ЕЩЕ БОЛЬШЕ РЕДАКТИРОВАТЬ: только 2 раза htmlentities Если вы хотите, чтобы ваш результат был нормальным на странице. Если вы хотите напрямую отправить f.e. база данных, только один раз! -> что я говорил раньше это partually неправильно. :(