2013-03-18 2 views
0

я обновил свой PHP 5.3 и у меня есть проблемы с моим ereg_replaceereg_replace код

$txt = ereg_replace("<(/)?(font|span|div|del|ins)[^>]*>","",$txt); 
$txt = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>","<\\1>",$txt); 
$txt = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>","<\\1>",$txt); 

если я изменить ereg_replace к preg_replace я получаю предупреждение:

Сообщение: preg_replace() [функция. PREG замены]: Неизвестный модификатор «]»

кто-то может помочь мне исправить preg_replace

+0

Почему вы меняете с 'ereg_replace' на' preg_replace' вообще? –

+1

ereg_replace() устарел –

ответ

1

это происходит потому, что вы не имеете метасимвола с. Вам нужно добавить их.

Попробуйте

$pattern1 = '#<(/)?(font|span|div|del|ins)[^>]*>#'; 
$pattern2 = '#<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>#'; 
$txt = preg_replace($pattern1, '', $txt); 
$txt = preg_replace($pattern2, '<\\1>', $txt); 

еще лучше, хотя, было бы не использовать регулярное выражение на все, чтобы попытаться разобрать HTML, как это.

+0

да это работает, спасибо –

1
$txt = preg_replace("~<(/)?(font|span|div|del|ins)[^>]*>~","",$txt); 
$txt = preg_replace("~<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>~","<\\1>",$txt); 
$txt = preg_replace(~"<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>~","<\\1>",$txt); 

Я добавил к этим выражениям разделители (~). Пытаться.

+0

да, он работает лет, спасибо –