Html-объекты возвращаются к специальным символам с помощью php

Я хочу преобразовать специальные символы в объекты HTML, а затем вернуться к исходным символам.

Я использовал htmlentities(), а затем html_entity_decode(). У меня это работало нормально, но { и } не возвращаются к исходным символам, они остаются { и }.

Что я могу сделать сейчас?

Мой код выглядит так:

$custom_header = htmlentities($custom_header);
$custom_header = html_entity_decode($custom_header);

person Pritom    schedule 23.11.2011    source источник
comment
Не могу воспроизвести. codepad.org/EpUQzjrx Приведите полный пример, демонстрирующий такое поведение.   -  person deceze♦    schedule 23.11.2011
comment
Мой $custom_header выглядит так: ‹p›‹script type=text/javascript› $(document).ready(function() { $(#left_side_custom_image).click(function() { alert(HELLO); }); }) ; ‹/скрипт›‹/p›   -  person Pritom    schedule 23.11.2011
comment
Итак, вы htmlentity-кодируете строку, содержащую {, и при ее декодировании она возвращает {? Это... ожидаемо.   -  person deceze♦    schedule 23.11.2011
comment
Пожалуйста, перейдите по ссылке codepad.org/EpUQzjrx и сделайте мне одолжение. Я хочу { to '{' иначе мой код jquery не работает.   -  person Pritom    schedule 23.11.2011
comment
Похоже, это та же самая строка, см. эту вставку, которая выводит bin2hex из '{}': codepad.org/IvdErNzg   -  person nickb    schedule 23.11.2011
comment
Посмотрите на этот codepad.org/kWs4Q275.   -  person Pritom    schedule 23.11.2011


Ответы (1)


Даже если никто не может воспроизвести вашу проблему, вот прямой способ решить ее с помощью простой str_replace.

$input = '<p><script type="text/javascript"> $(document).ready(function() &#123; $("#left_side_custom_image").click(function() &#123; alert("HELLO"); &#125;); &#125;); </script></p> ';
$output = str_replace( array( '&#123;', '&#125;'), array( '{', '}'), $input);

Демо (нажмите ссылку "Источник" в правом верхнем углу)

Изменить: теперь я вижу проблему. Если ваша входная строка:

"&#123;hello}"

Вызов htmlentities кодирует & в &amp;, что дает вам строку

"&amp;#123;hello}"

Затем &amp; затем декодируется обратно в &, чтобы вывести это:

"&#123;hello}"

Исправление состоит в том, чтобы снова отправить строку через html_entity_decode, что правильно декодирует ваши сущности.

$custom_header = "&#123;hello}";
$custom_header = htmlentities($custom_header);

$custom_header = html_entity_decode($custom_header);
echo html_entity_decode( $custom_header); // Outputs {hello}
person nickb    schedule 23.11.2011
comment
Спасибо за этот ответ, но если какой-либо другой символ содержит позже, которого на этот раз нет? Как я могу написать полный код замены такого типа символов? - person Pritom; 23.11.2011
comment
@ user1044804 - я отредактировал свое решение, добавив исправление для вашей последней вставки. - person nickb; 23.11.2011