Конечно, это было задано раньше и искали решения, которые до сих пор не работали. Я хочу изменить символ 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');
вывод :
<html> <head><head>something like this </html>
Я думал, что у меня такая же проблема, как у Pjack (сообщение от 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).
Однако после того, как еще подумалось, мне пришло в голову, что браузер показывает строки & lt; и & gt; as> и <. (См. Исходный код в браузере). Второй вызов htmlentities переводит &
и только тогда браузер отображает то, что вы ожидали в первую очередь.
У меня была почти такая же проблема (в которой так или иначе она показывала один и тот же текст каждый раз), и с помощью комбинации разных эхо-сигналов она получила это. Кажется, что веб-браузеры, подобные 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
если хотите повторить свой результат на странице. Если вы хотите напрямую отправить в базу данных, сделайте это только один раз! -> то, что я сказал раньше, является неполным. 🙁