Forum Webscript.Ru
Программирование => PHP => Тема начата: Ardzhan от 21 Июля 2004, 10:16:45
-
Вообщем такая проблема. Сделал регулярное выражение, которое удаляет атрибуты из тегов:
preg_replace("/(<[A-Z]+?)\\\\s(.*?)+(>{1}?)/is", "$1$3", $ok);
Как сделать, чтоб оно не удаляло атрибуты colspan и rawspan.
-
Неидеальная ф-я удаления атрибутов (кроме href) из (приводил уже, вроде, как-то...), может, поможет:
function fncStripAttrsExceptHREF($strText) {
$strRegExp1 = \'~
<\\\\s*a\\\\s+ # начало тэга
[^>]* # мусор до href
href\\\\s*=\\\\s* # начало атрибута href
([\\\\\\\\\'"]?) # опциональные кавычки
(\\\\S+) # значение атрибута
\\\\1 # такие же кавычки
[^>]* # мусор после href
> # конец тэга
~ix\';
$strRegExp2 = \'~
on(
(dbl)?click |
mouse(down|up|over|move|out) |
key(press|down|up) |
focus |
blur
)
~ix\';
return
preg_replace(
$strRegExp2,
\'BAD\',
preg_replace(
$strRegExp1,
\'\',
$strText
)
);
} # function fncStripAttrsExceptHREF
-
Здесь
перед 2
должен быть \\
[off]мне не удалось это заставить показывать[/off]
-
млин, а если верстальщик извратится и сделает что-то типа:
..
Уже такая регулярка не сработает :(
-
Ardzhan
Во-первых, - ты бы попробовал раньше:
echo htmlspecialchars(fncStripAttrsExceptHREF(\'..\'), ENT_QUOTES);
Во-вторых - в любом случае она не идеальная, я же писал...