Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, рег. выражение) Замена двойных кавычек на спец. символ & quot; вне тегов / 4 сообщений из 4, страница 1 из 1
11.04.2006, 12:53:56
    #33658077
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, рег. выражение) Замена двойных кавычек на спец. символ & quot; вне тегов
Привет!

Требуется заменить двойные кавычки " в тексте на & quot; . Кавычки внутри тегов не учитываются.

Нашел вот такое решение Замена некоторой подстроки только вне тэгов:
Код: plaintext
1.
2.
3.
4.
5.
6.
<?
$html = 'текст с подстрокой, подверженной <span title="С точки зрения подстроки!">ожирению</span>';
$substring = 'подстро\S+';
$replacement = '<b>$2</b>';
$result = preg_replace("/((?:^|>)[^<]*)($substring)/s", '$1'.$replacement, $html);
?>

Но к сожалению, оно работает не совсем корректно.
Если ввести следующее:
Код: plaintext
1.
2.
3.
4.
5.
$html = '<a href="http://mysite.ru">Foo "url" bar</a>';

$substring = '"';
$replacement = '"';
$result = preg_replace("/((?:^|>)[^<]*)$substring/s", '$1'.$replacement, $html);

то на выходе получается (одна кавычка " пропущена):
Код: plaintext
1.
<a href="http://mysite.ru">Foo "url& quot; bar</a>

Подскажите, что надо исправить?

Заранее благодарю.
...
Рейтинг: 0 / 0
11.04.2006, 23:49:54
    #33659825
Шогал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, рег. выражение) Замена двойных кавычек на спец. символ & quot; вне тегов
Таблеток мне от жадности, да побольше, да побольше (с)
------------
CMD: Console of Must Die
...
Рейтинг: 0 / 0
12.04.2006, 09:40:30
    #33660144
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, рег. выражение) Замена двойных кавычек на спец. символ & quot; вне тегов
ШогалТаблеток мне от жадности, да побольше, да побольше (с)
------------
CMD: Console of Must Die
А вы попробуйте поставить модификатор U .

Код: plaintext
1.
2.
3.
4.
5.
$html = '<a href="http://mysite.ru">Foo "url" bar</a>';

$substring = '"';
$replacement = '& quot;';
$result = preg_replace("/((?:^|>)[^<]*)$substring/sU", '$1'.$replacement, $html);

Возвращает:
Код: plaintext
<a href="http://mysite.ru">Foo  & quot; url" bar</a>

Может кто-нить знает почему в данном реге "проскакивает" замена кавычек?
...
Рейтинг: 0 / 0
12.04.2006, 14:34:54
    #33661394
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, рег. выражение) Замена двойных кавычек на спец. символ & quot; вне тегов
Вот такой вариант вроде бы рабочий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?php

$html = '<a href="http://mysite.ru">Foo "url" bar</a>';

$substring = '\"';
$replacement = '& quot;';
$result = preg_replace_callback("/((?:^|>)[^<]*)($substring)/si", "my_callback", $html);

function my_callback($match)
{
	return preg_replace('/\"/', '& quot;', $match[ 0 ]);
}
?>

Вернет:
Код: plaintext
1.
<a href="http://mysite.ru">Foo  & quot; url & quot;  bar</a>
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, рег. выражение) Замена двойных кавычек на спец. символ & quot; вне тегов / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]