Заменить определенные символы, но только в HTML-тегах

KeTal

Guest
Заменить определенные символы, но только в HTML-тегах

Нужно заменить, например "«", на кавычку ("), но только в HTML-тегах. Есть такое выражение:
PHP:
$r = preg_replace ( "/<([^>]*)>/es", "'<".str_replace ('&laquo;', '"','\1').">'", $r);
Пробовал по-всякому крутить, но либо заменяются все символы в тексте, либо вообще ничего не заменяется. Подскажите, где ошибка. :confused:
 

kamatoz

Новичок
PHP:
$r = 'text text " &laquo; <a href=&laquo;asdf.htm>fsdf ds " &laquo;</a>';
$r = preg_replace ( "/<(.*)&laquo;(.*)>/U", '<$1"$2>', $r);
echo $r;
//text text " &laquo; <a href="asdf.htm>fsdf ds " &laquo;</a>
 

KeTal

Guest
Спасибо, но работает немного не корректно.
Напимер
<a href=&laquo;test" title=&laquo;test"> заменяет на
<a href="test" title=&laquo;test">, т.е. только первую &laquo;, встретившуюся в теге. А если в теге нет &laquo;, то получается, что она заменяется внутри блочного тега:
<h1>&laquo;Test</h1>
заменяет на
<h1>"Test</h1>, хотя в данном случае &laquo;Test трогать не должна. По сути можно вызвать preg_replace несколько раз, чтобы заменить все &laquo;, встретившиеся в теге, но остается проблема с заменой внутри блочного тега, как ее избежать?
 

KeTal

Guest
Sluggard
А нельзя ли подсказать, как ее исправить? Я просто в regexp`ах не очень хорошо шарю.
 

Sluggard

Новичок
Отчего же нельзя? Можно подсказать и как. Сначала читаешь preg_replace, а потом правишь. Там пример есть с модификатором е.
 
Сверху