str_replace не работает в html-кодах

я работаю с формой, одно из ее полей - это текстовая область RTF (jWYSIWYG), которая автоматически заполняется некоторой информацией о базе данных при загрузке страницы, и все это с использованием среды Symfony. Этот редактор RTF может добавлять некоторые HTML-теги, такие как <p>, <b> и т. д.

Проблема начинается, когда я пытаюсь узнать, была ли изменена текстовая область перед отправкой формы: что я получаю от $request, так это то, что все теги html закодированы как &lt;p&gt;, &lt;b&gt; и т. д. Я попытался заменить эти выражения на < и > символов, чтобы я мог сравнить их с сохраненными данными.

$codes = array('&gt;','&lt;');
$chars = array('<'   ,'>' );
return str_replace($codes,$chars,$text);

но эта функция возвращает мне тот же массив, который я передаю в качестве параметра функции str_replace. Что я делаю неправильно? у кого-нибудь была такая же проблема?


person Andreu Ramos    schedule 19.12.2011    source источник
comment
что содержит ваша переменная $text?   -  person Robert    schedule 19.12.2011
comment
&lt;p&gt;something something something&lt;/p&gt;. Я хочу, чтобы это было равно этому <p>something something something</p>. И так со всеми кодами тегов html   -  person Andreu Ramos    schedule 19.12.2011
comment
вы пытались просто вставить str_replace('','›','p'); просто чтобы увидеть, работает ли он так, как вы ожидаете.   -  person Robert    schedule 19.12.2011
comment
да, &gt;p&amp;gt; - это результат вызова этой функции   -  person Andreu Ramos    schedule 19.12.2011
comment
единственное, о чем я могу думать, это то, что что-то не совпадает. Может быть, жестко закодировать некоторые значения, просто чтобы увидеть, как они меняются.   -  person Robert    schedule 19.12.2011
comment
Для этого есть функция php: html_entity_decode.   -  person bodo    schedule 04.03.2013


Ответы (2)


Попробуйте эту функцию вместо str_replace: http://www.php.net/manual/en/function.htmlspecialchars-decode.php

person Ryan Casas    schedule 19.12.2011

Наконец обнаружил проблему. Не было про html теги! проблема в том (я не знаю почему) jWYSIWYG добавляет около 24 пробелов в конце поля, поэтому очевидно, что сравнение между сохраненными и новыми данными отличается.

я просто удалил последние пробелы ввода следующим образом:

$text = rtrim($text);
person Andreu Ramos    schedule 20.12.2011