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');

выход :

&lt;html&gt; &lt;head&gt;&lt;head&gt;something like this &lt;/html&gt;


Я думал, что у меня та же проблема, что и у Pjack (msg от 14 июля в 8: 54):

$str = "A 'quote' is <b>bold</b>";
echo htmlentities($str); 

дает в браузере (Firefox в моем случае) исходную строку $str (без любой перевод), в то время как

echo htmlentities(htmlentities($str));

выдает:

A 'quote' is &lt;b&gt;bold&lt;/b&gt; 

(Я использую PHP / 5.4.16, полученный из windows-7 XAMPP).

однако после некоторых размышлений мне пришло в голову, что браузер показывает строки как > и <.>&amp; и только тогда браузер показывает, что вы ожидали в первую очередь.


у меня была почти такая же проблема (в которой каким-то образом он показывал один и тот же текст каждый раз), и с комбинацией разных эхо я получил его. Кажется, что веб-браузеры, такие как 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 неправильно. :(