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.log
ged, он фактически повторяет текст htmlentities (почти) правильно. Вместо замены каждого специального char с html-кодировки, он заменяет их какой-то другой кодировкой, которую я уже видел раньше (я не могу вспомнить имя). Htmlentities-снова, я снова получаю тот же текст echod (помните, что он преобразует все), но повторяет его в консоли.журнал-версия дает мне ожидаемый результат. Теперь, опять же, в результате:
1. Выполнить htmlentities
два раза!
2. не (по крайней мере с Firefox) Эхо htmlentities как обычно на странице. Если вы хотите проверить, правильно ли значение, Эхо-скрипт, который регистрирует его в консоли.
Я надеюсь, что это может помочь другим парням с той же проблемой,
VicStudio
редактировать: 3. Если вы используете $_POST
formular, не забудьте добавить accept-charset="UTF-8"
(или какая-то другая кодировка) в <form>
тег.
ЕЩЕ БОЛЬШЕ РЕДАКТИРОВАТЬ: только 2 раза htmlentities
Если вы хотите, чтобы ваш результат был нормальным на странице. Если вы хотите напрямую отправить f.e. база данных, только один раз! -> что я говорил раньше это partually неправильно. :(