![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Есть такая строка
test1 <script> var x = "sfsdf"; </script> test2 Хочу убрать из неё тег script и то, что внутри него. Пробую это сделать так:
Но в результате ничего не происходит. Подскажите, пожалуйста, почему? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
`?` поможет избежать странных ситуаций с множеством скриптов. модификатор `s` позволит точке захватывать и символы перевода строки. Почему не сработал символьный класс - мутная история, даже добавление \r не помогает. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
||||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
А на таких данных без вопросика сработает? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
_zorn_ |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 6 Всего: 12 |
В пхп кто то еще использует слэши для определения границ регекспов ?
Неужели так веселей с заборами
чем так ?
Где быстрее поймёшь что делает регулярка, в первом или втором примере ? ![]() Ситуации не странные. По умолчанию + и * жадные (берут все до последнего вхождения). Вопросик инвертирует жадность (берут до первого вхождения если были жадные). Есть даже модификатор чтобы квантификаторы были не жадные.
Ничего мутного. Там впридачу еще двойные кавычки. Так что \n пхп УЖЕ перевёл в перевод строки перед тем как отправить на растерзание движку регекспов (с двойными кавычками надо было \\n - сами себе заборы городите). Чтобы избегать таких "странных" ситуаций, я всегда использую одинарные кавычки и решетки как границу регекспа. В вашем же случае правильная регекспа будет выглядеть так (иначе можно будет замутить <script>alert('OLOLO')</script > и браузер это отработает)
Модификатор "s" включает переводы строки в "." ЗЫ. А почему не htmlspecialchars ? Это сообщение отредактировал(а) _zorn_ - 12.3.2016, 06:36 |
||||||||
|
|||||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Да ну? Тот факт, что точка НЕ может использоваться как элемент символьного класса не мутен? По идее, класс [\r\n.] должен бы выбирать все символы, включая перевод строк, а на деле такое может только конструкция ([\r\n]|.) Ничего мутного? ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
_zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 6 Всего: 12 |
С чего бы это ? В симольном класе точка - и есть точка, а не любой символ. Хз что вы там себе наприбумывали.... Да нидолжно быть никаких "по идее" если хочешь разобраться. В данном случае сделай echo '\nOLOLO'; echo "\nOLOLO"; И попробуй разобраться Прочитай про модификаторы... хотя бы жадности. |
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Не работает. Не понимаю пока почему, буду разбираться ![]() _zorn_, по тому, что вы написали тоже пока ничего не понял. Помедитирую на досуге. ![]() Пока отвечу на Есть wysiwyg редактор, который на выходе возвращает html. Этот html записывается в базу, а потом я его оттуда просто отображаю на страничке. Если сделать htmlspecialchars (я пробовал), тогда html отображается в виде текста. А тема эта появилась, потому что недавно я обнаружил, что какая-то сволота каким-то образом вставила javascript в базу. Это при том, что я как не пробовал, wysiwyg у меня скрипт зарезает. Поэтому я решил попробовать вырезать js код. Допускаю, что так, как я сейчас пытаюсь решить эту проблему, из приличных людей никто так не делает. Если это так, то может быть подскажете, как делают? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Нужно почитать про `?`и "жадность". Своими словами - конструкция .* или .+ работает в 2 режимах - жадный и нежадный. В первом захватывается последняя подходящая конструкция, в последнем - первая. По умолчанию, конструкция с точкой - в жадном режиме, вопросик переключает эти режимы. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
||||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Сначала нужно описать саму проблему. Что за тексты, откуда они берутся, кем написаны (скрипт, чужие люди, собственные админы) Зачем оттуда нужно выкидывать какие-то элементы? Только ли скрипты оттуда нужно выкидывать? Может еще и ифреймы и активные элементы?
После этого можно будет формулировать подходы к решению. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
ksnk, не не. Возможно вы подскажете как не допустить такого, в принципе. Выкидывать <script> это как костыль. Как я выше писал, есть wysiwyg редактор, из которого можно получить html разметку. Я её получаю и в том виде, как она есть, без htmlspecialchars и прочего пишу этот html в базу. Потом на определенной странице беру то, что я положил в базу ранее и просто, опять таки без какой-либо обработки, вывожу на страницу и получаю красиво размеченные сообщения. Вопрос в том, что так нормальные люди делают?
Это сообщение отредактировал(а) V0fka - 15.3.2016, 13:22 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Обычно, считается, что в базу попадает уже валидный и корректный код. Просто чтобы не делать обработку каждый раз при выводе. Таким образом проверку и обработку неплохо бы делать перед складированием в базу, сразу после визивига.
Самому писать всю эту чистку довольно заморочно. Есть готовые инструменты, которые все чистят, например http://htmlpurifier.org/ Но он страшно велик. С другой стороны еще и могуч... Наткнулся на MarkHtml - https://habrahabr.ru/post/116607/ На первый взгляд - забавно и компактно, хотя сам и не пробовал. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
ksnk, попробую значит прикрутить MarkHtml и дополнительно буду медитировать над "жадностью" и "?". Спасибо большое за помощь!
![]() _zorn_, вам так же спасибо за ответы! |
|||
|
||||
V0fka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
ksnk, почитал про жадность, появилась пара вопросов
![]() Ещё читал, как вставлять модификаторы в шаблон, пишут, что вместо ? можно ещё указывать (?U). С ? удобнее, спору нет, но интереса ради я попробовал и с (?U): /<script>.*(?U)<\/script>/s. Но оно так не работает. Почему? _zorn_, раскурил вашу регулярку. Вроде понял. Спасибо! И решетками обрамлять выражение, на первый взгляд, действительно удобнее. Это сообщение отредактировал(а) V0fka - 18.3.2016, 13:46 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |