Регулярное выражение для поиска тегов HTML оставляет пустые теги в PHP - PullRequest
1 голос
/ 22 марта 2012

Я пытаюсь удалить все скрытые теги (и конечный тег) с помощью регулярного выражения, и это, кажется, работает, но с одной проблемой.Он оставляет "<>" для всех найденных элементов.

Я использую это, чтобы заменить мои скрытые поля пустыми:

$saveContent = preg_replace('<input type="hidden" .*? />', "", $saveContent);
$saveContent = preg_replace('</form>', "", $saveContent);

Он просто возвращает "<> <><> "(2 скрытых поля и конечный тег формы).Я попытался заменить строку <>, и это тоже не сработало

Я что-то упустил?

Ответы [ 5 ]

2 голосов
/ 22 марта 2012

Проблема (кроме попытки сопоставить HTML с регулярным выражением) заключается в том, что вы не правильно заключаете в кавычки выражение внутри строки, что обычно делается в PHP, как "/regex/", но вместо символа можно использовать любой символ косые черты, например "~regex~".

В вашем случае < - это символ кавычки, который делает конечную кавычку > (т.е. "<regex>"), что делает его действительным в preg_* и не дает никаких ошибок.

Например:

preg_replace('</form>', "", $str)

совпадает с

preg_replace('~/form~', "", $str)

и

preg_replace('/\/form/', "", $str)

Все они заменяют /form пустой строкой.

Пока вы хотели:

preg_replace('~</form>~', "", $str)
1 голос
/ 22 марта 2012

Вам нужно экранировать косую черту .. и добавить косую черту для работы модификаторов http://php.net/manual/en/reference.pcre.pattern.modifiers.php

$saveContent = preg_replace('/<input type="hidden" .*? \/>/i', "", $saveContent);    
$saveContent = preg_replace('/<\/form>/i', "", $saveContent);
0 голосов
/ 22 марта 2012

Попробуйте это

$content = '<input type="hidden" name="abc" /> abc <input type="hidden" name="abc" />';
preg_replace('#<input type="hidden"[^>]+>#', '', $content);
0 голосов
/ 22 марта 2012

Оказывается, по какой-то причине (о которой я не знал), символы <и> преобразовывались в сущности, но только для избранных.

Я только что проверил эти сущности и строкизаменил их на правильные символы, и это сработало.

0 голосов
/ 22 марта 2012

Если я правильно помню, вы можете поместить шаблон между%, чтобы избежать всего того выхода, что делает его практически нечитаемым, например

if (preg_match('%</form>%', $subject)) {
    # Successful match
} else {
    # Match attempt failed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...