#php #javascript #html-entities
#php #javascript #html-сущности
Вопрос:
У меня происходит некоторое преобразование Ajax, и у меня есть 2 блока исходного кода. Первый — это:
window.lastSavedContents = "<?php echo htmlentities( $contents ); ?>";
Второй — это то, что пользователь вводит в текстовый редактор. Проблема в том, что window.lastSavedContents
is htmlentities
закодирован, тогда как второй блок — нет.
Как я могу проверить эквивалентность?
Ответ №1:
Во-первых, не используйте htmlentities
, но htmlspecialchars
, который кодирует только <
, >
, amp;
и "
. Таким образом, вы можете просто заменить эти объекты с помощью
var decoded = encoded.replace(/amp;amp;/g, 'amp;')
.replace(/amp;</g, '<')
.replace(/amp;quot;/g, '"')
.replace(/amp;>/g, '>');
Если вы все еще хотите использовать htmlentities
, вы можете просто создать временный div
:
var div = document.createElement('div');
div.innerHTML = encoded;
var decoded = div.firstChild.nodeValue;
Ответ №2:
Вы могли бы либо найти способ обойти сущность, кодирующую данные, либо декодировать window.lastSavedContents
в Javascript. Вот функция, которая поможет вам это сделать: http://phpjs.org/functions/html_entity_decode:424