|
|
|
| Все привет, не могу понять почему не срабатывает условие в шаблоне.
Вообщем нужно заэкранировать все двойные кавычки в тексте и потом найти экранированые кавычки в стилях, прописанные внутри тегов и убрать экранирование. Не спрашивайте зачем мне нужен этот бред :)
<?
$shablon = array("/\"/","/style=\\\"(.*)\\\"/iu");
$replace = array("\\\"","style=\"$1\"");
$text = "<p>привет \"народ\" <span style=\"color:red;\">как дела?</span></p>
<p>Привет <span style=\"color:green;\">все хорошо!</span></p>";
echo preg_replace($shablon,$replace,$text);
?>
|
экранирует все кавычки, но второй шаблон регулярка не находит что ли.. | |
|
|
|
|
|
|
|
для: ladan
(12.03.2012 в 22:57)
| | добавил пару обратных слешей в шаблон и заработало, но некорректно обрабатывает, если уже внутри тега(со стилем) есть другие теги со стилем
<?
$shablon = array("/\"/","/style=\\\\\"(.*)\\\\\"/iu");
$replace = array("\\\"","style=\"$1\"");
$text = "<p>привет \"народ\" <span style=\"color:red;\"><span style=\"font-size:15px;\">как дела?</span></span></p>
<p style=\"text-align:center;\">Привет <span style=\"color:green;\">все хорошо!</span></p>";
echo preg_replace($shablon,$replace,$text);
//выводит
/*
<p>привет \"народ\" <span style="color:red;\"><span style=\"font-size:15px;">как дела?</span></span></p>
<p style="text-align:center;\">Привет <span style=\"color:green;">все хорошо!</span></p>
*/
?>
|
| |
|
|
|
|
|
|
|
для: ladan
(12.03.2012 в 23:12)
| | (.*) => (.*?) | |
|
|
|
|
|
|
|
для: Sfinks
(13.03.2012 в 00:48)
| | СПАСИБО!! надо запомнить этот прием :) | |
|
|
|
|
|
|
|
для: Sfinks
(13.03.2012 в 00:48)
| | а как еще можно убрать экранирование в картинках?
<?
/*
<p> \"ясное небо\" <img src=\"http://i024.radikal.ru/1203/7e/a3c322da60c2.jpg\" alt=\"\" width=\"200\" height=\"326\" /></p>
*/
?>
|
примерно такой код
<?
$shablon = array("/(<img)?\\\\\"(>)?/i"); //убирает экранирование везде. Нужно только в теге img
$replace = array("\"");
$text = "<p> \\\"ясное небо\\\" <img src=\\\"http://i024.radikal.ru/1203/7e/a3c322da60c2.jpg\\\" alt=\\\"\\\" width=\\\"200\\\" height=\\\"326\\\" /></p>";
echo preg_replace($shablon,$replace,$text);
?>
|
или можно как-то исключение сделать в регулярке, что не нужно заменять в таком-то совпадении? | |
|
|
|
|
|
|
|
для: ladan
(13.03.2012 в 12:57)
| | С исключениями типа "найти где нет", "заменить везде кроме", "не заменять где есть" в РВ туго.
Поэтому подход "от противного" тому что нужно: Найти то что нужно и заменить только там:
<?php
$s = '<p> \"ясное небо\" <img src=\"http://i024.radikal.ru/1203/7e/a3c322da60c2.jpg\" alt=\"\" width=\"200\" height=\"326\" /></p>';
echo preg_replace_callback( "#<img[^>]*>#si" , create_function( '$matches' , 'return stripslashes($matches[0]);' ) , $s );
?>
| как-то так ) | |
|
|
|
|
|
|
|
для: Sfinks
(13.03.2012 в 23:33)
| | Спасибо! Вы как всегда на высоте :) | |
|
|
|