PHP htmlentities не работает даже с параметрами

Конечно, это было задано раньше и искали решения, которые до сих пор не работали. Я хочу изменить символ TM и амперсанд на их html equivelents, используя 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 а второй параметр изменился с тем же результатом.

Что мне не хватает, что другие утверждали, что работали в других решениях?

UPDATE : я попробовал просто показать utf8_encode($TEST) и отобразил HTML: Kold Locker™ & other stuff

Ваш код работает для меня: -?

На странице руководства для 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 (сообщение от 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).

Однако после того, как еще подумалось, мне пришло в голову, что браузер показывает строки & lt; и & gt; as> и <. (См. Исходный код в браузере). Второй вызов htmlentities переводит &amp; и только тогда браузер отображает то, что вы ожидали в первую очередь.

У меня была почти такая же проблема (в которой так или иначе она показывала один и тот же текст каждый раз), и с помощью комбинации разных эхо-сигналов она получила это. Кажется, что веб-браузеры, подобные firefox, каждый раз показывают один и тот же текст. Это происходит потому, что когда вы echo htmlentities-text, его переводят обратно в обычный текст во время эха. Когда я повторяю скрипт с переменной / текстом, который должен быть console.log ged, он фактически выполняет эхо-текст htmlentities (почти) правильно. Вместо замены каждого специального символа html-кодировками он заменяет «em» другой кодировкой, которую я уже видел раньше (я не могу запомнить имя). Htmlentities-in it again, я снова получаю тот же текст echo'd (помните, что он преобразует все), но повторение этого в console.log-версии дает мне ожидаемый результат. Теперь, опять же, в результате:
1. Выполните htmlentities два раза !
2. Не пытайтесь (по крайней мере, с firefox) отсылать htmlentities как обычно на веб-страницу . Если вы хотите проверить правильность значения, повторите сценарий, который записывает его в консоль.
Надеюсь, это поможет другим парням с той же проблемой,
VicStudio

EDIT : 3. Если вы используете формуляр $_POST , не забудьте добавить accept-charset="UTF-8" (или некоторую другую кодировку) в <form> .

ДАЖЕ БОЛЬШЕ РЕДАКТИРОВАНИЯ : htmlentities только 2 раза htmlentities если хотите повторить свой результат на странице. Если вы хотите напрямую отправить в базу данных, сделайте это только один раз! -> то, что я сказал раньше, является неполным. 🙁