Удаление атрибутов у тегов (регулярные выражения)

nick4

Guest
Удаление атрибутов у тегов (регулярные выражения)

Есть текст:
<a href="index.html" onClick="alert('Hi!');">

и предположим нужно удалить атрибут "onClick" из всех тегов, соответственно RegXP будет такой: onсlick="[^">]+" (варианты без кавычек - не рассматривается, вариант с одинарными кавычками - идентичен) - но, если в тексте атрибута встречается кавычка, экранированная слэшэм (\") - как в этом случае правильно написать рег?

<a href="index.html" onClick="alert('Hi! \"test\" test');">
 

nick4

Guest
не понял вопроса.

-~{}~ 02.02.05 11:52:

поясню:
в случае использования RegXp'а onсlick="[^">]+" - preg_replace корректно заменит onClick="alert('Hi!');", однако в случае если в атрибуте между кавычками присутствует еще одна экранированная кавычка \" onClick="alert('Hi! \"test\" test');" - preg_replace удалит все, до test\" test');".

Так вот как можно в список исключений [^...], добавить строку из двух и более символов (в данном случае экранированная кавычка \")?
 

vladax

Новичок
---

-~{}~ 02.02.05 12:41:

nick4
господи, да припиши ты к своей закрывающей кавычке );
и будет тебе счастье :)
|onClick=('|").+?);\1|si
 

nick4

Guest
вовсе нет :cool:
да припиши ты к своей закрывающей кавычке );
и будет тебе счастье :)
|onClick=('|").+?);\1|si
причем тут вообще скобка с запятой?
я говорю об универсальном варианте - тоесть так, как распознает браузер, это значит что рег должен резать все варианты, которые содержатся в границах между " и " с учетом возможной вставки экранированных кавычек.

Вопрос не столько в этом - сколько в том чтобы узнать каким образом можно добавить в список исключений [^...] элементы которые содержат от 2 и более символов..

может быть вариант и
onclick="alert(3)"
onclick="test=\"1\""
и т.д...
 

nick4

Guest
Originally posted by IntenT
nick4

Браузер распознает не регами
Во-первых это тут не причем, под браузером я имел ввиду "парсер", я думаю это итак понятно было, зачем умничать?
Во-вторых – если на то пошло - тут не упоминалось о конкретном браузере, откуда ты знаешь, что не один из существующих браузеров не распознает контент регулярными выражениями?
 

IntenT

SkyDiver
nick4
под браузером я имел ввиду "парсер"
А почему не лопату, например?


тут не упоминалось о конкретном браузере, откуда ты знаешь, что не один из существующих браузеров не распознает контент регулярными выражениями?
Как найдешь такой браузер - возьмешь себе пирожок с полки.
 

Green Mother

Guest
/onclick="[^"]*(\\"([^"]*))*"/i
не проверял, но мысля, думаю, ясна.
 

nick4

Guest
Originally posted by IntenT
nick4

А почему не лопату, например?

Все просто - человеку дана уникальная возможность понимать контекст, в котором был задан вопрос. Если-бы я хотел задать вопрос про лопату - я бы написал "тоесть так, как распознает лопата". Спор бессмысленный..
 

SelenIT

IT-лунатик :)
Есть мнение, что как раз браузер не понимает заэкранированых кавычек - он считает значением атрибута текст от открывающей кавычки до ближайшей следующей (включая слеш), а все, что дальше - просто отбрасывает.

Вот и следующий пост это убедительно подтверждает :)
 

Vasya

Guest
Imho, HTML не поддерживает экранирование кавычек в атрибутах типа <tag attr="qwe\"rty">. То есть, в этом случае значение атрибута attr будет равно `qwe\`.

RTFM!
http://www.w3.org/TR/1999/REC-html401-19991224/intro/sgmltut.html#attributes
---------------------------
By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa. Authors may also use numeric character references to represent double quotes (&amp;#34;) and single quotes (&amp;#39;). For double quotes authors can also use the character entity reference &amp;quot;.

In certain cases, authors may specify the value of an attribute without any quotation marks. The attribute value may only contain letters (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45), periods (ASCII decimal 46), underscores (ASCII decimal 95), and colons (ASCII decimal 58). We recommend using quotation marks even when it is possible to eliminate them.
---------------------------

Проверим?
Код:
<html><body><a id="sample" href="#" onClick="alert(\"Hello!\");">hello</a>
<script language="JavaScript">
<!--
var a = document.getElementById("sample");
alert("attribute value: '"+a.getAttribute("onclick")+"'")
//-->
</script></body></html>
 

nick4

Guest
не могу поверить, да действительно не работают :)
но все-же - задача для меня все равно интересная - приведенный пример выше не работает
 

IntenT

SkyDiver
nick4
Еще раз, для овнов объясняю на пальцах.
браузер != парсер
если под браузером человек имеет в виду парсер - то спорить с ним действительно бессмысленно.
Потому что совершенно неясно, что этот самый человек может подразумевать под словом "спор".
 

vladax

Новичок
nick4
вот видишь :)
вот тебе Vasya и разжевал то, на что я намекал тебе в первом посте ;-)
нормальные люди беря данные и выводя их в алерт или, скажем, в конферм, пользуют [m]htmlspecialchars[/m]
 

Green Mother

Guest
Автор оригинала: SelenIT
Есть мнение, что как раз браузер не понимает заэкранированых кавычек
действительно, я облажался, первоначальный вопрос был бессмысленен.
 
Сверху