Как я могу увидеть, эквивалентны ли 2 фрагмента кода в JavaScript / PHP?

#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