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 и второй параметр изменился с тем же результатом.



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



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

844   4  

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 (почти) правильно. Вместо замены каждого специального символа на html-кодировки, он заменяет их на некоторые другие кодировки, которые я уже видел раньше (я не могу вспомнить название). Htmlentities-ing it again, Я снова получаю тот же текст echod (помните, что он преобразует все), но повторяя его в консоли.лог-версия дает мне ожидаемый результат. Теперь, опять же, в результате:
1. Выполнить htmlentities два раза !
2. Dont (по крайней мере, с firefox) echo htmlentities as normalв веб-страницу . Если вы хотите проверить, является ли значение на самом деле правильно, echo скрипт, который регистрирует его в консоли.
Я надеюсь, что это может помочь другим ребятам с той же проблемой,
VicStudio

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

Еще больше EDIT : только сделайте 2 раза htmlentities, Если вы хотите, чтобы ваш результат был нормальным на странице. Если вы хотите напрямую отправить, например, базу данных, сделайте это только один раз! - >то, что я сказал раньше, частично неверно. : (

Comments

    Ничего не найдено.