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

  • Автор темы Автор темы nick4
  • Дата начала Дата начала

nick4

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

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

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

<a href="index.html" onClick="alert('Hi! \"test\" test');">
 
не понял вопроса.

-~{}~ 02.02.05 11:52:

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

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

-~{}~ 02.02.05 12:41:

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

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

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

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


тут не упоминалось о конкретном браузере, откуда ты знаешь, что не один из существующих браузеров не распознает контент регулярными выражениями?
Как найдешь такой браузер - возьмешь себе пирожок с полки.
 
/onclick="[^"]*(\\"([^"]*))*"/i
не проверял, но мысля, думаю, ясна.
 
Originally posted by IntenT
nick4

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

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

Вот и следующий пост это убедительно подтверждает :)
 
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
Еще раз, для овнов объясняю на пальцах.
браузер != парсер
если под браузером человек имеет в виду парсер - то спорить с ним действительно бессмысленно.
Потому что совершенно неясно, что этот самый человек может подразумевать под словом "спор".
 
nick4
вот видишь :)
вот тебе Vasya и разжевал то, на что я намекал тебе в первом посте ;-)
нормальные люди беря данные и выводя их в алерт или, скажем, в конферм, пользуют [m]htmlspecialchars[/m]
 
Автор оригинала: SelenIT
Есть мнение, что как раз браузер не понимает заэкранированых кавычек
действительно, я облажался, первоначальный вопрос был бессмысленен.
 
Сверху