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
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, показывают один и тот же текст каждый раз. Это потому, что когда вы
echohtmlentities-текст, его преобразование обратно в нормальный текст во время Эха. Когда я Эхо-скрипт с переменной / text, чтобы бытьconsole.logged, он на самом деле эхо текст htmlentities (почти) правильно. Вместо замены каждого специального символа на html-кодировки, он заменяет их на некоторые другие кодировки, которые я уже видел раньше (я не могу вспомнить название). Htmlentities-ing it again, Я снова получаю тот же текст echod (помните, что он преобразует все), но повторяя его в консоли.лог-версия дает мне ожидаемый результат. Теперь, опять же, в результате:
1. Выполнитьhtmlentitiesдва раза !
2. Dont (по крайней мере, с firefox) echo htmlentities as normalв веб-страницу . Если вы хотите проверить, является ли значение на самом деле правильно, echo скрипт, который регистрирует его в консоли.
Я надеюсь, что это может помочь другим ребятам с той же проблемой,
VicStudioEDIT : 3. Если вы используете формуляр
$_POST, Не забудьте добавитьaccept-charset="UTF-8"(или другую кодировку) к тегу<form>.Еще больше EDIT : только сделайте 2 раза
htmlentities, Если вы хотите, чтобы ваш результат был нормальным на странице. Если вы хотите напрямую отправить, например, базу данных, сделайте это только один раз! - >то, что я сказал раньше, частично неверно. : (
Comments