Двойные кавычки не совпадают в (Cake) PHP Regex - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть регулярное выражение, которое должно соответствовать какой-то строке вида: src = "/ blkjad.dafsdf">. Это выглядит так: (src | href) (\ s *)? = (\ S *)? (\ "| \ ') / ([^ /]. *?) \ 4.

Хотя на одном из сайтов, на которых я работаю, это работает нормально, на другом, встроенном в Cake, происходит сбой. Вот еще один неверный Regex => '/ (") /', который должен соответствовать любой двойной кавычке в строке.

Я сейчас в растерянности. Один из старших разработчиков, на котором я работаю, просто взглянул на это и покачал головой. К сожалению, я не настолько опытен в Cake, и я не могу найти подобных проблем в Интернете. Есть идеи?

edit: Для записи, регулярное выражение с ошибкой использует preg_match_all, а другое (идентичное / рабочее регулярное выражение) использует preg_replace. Вот соответствующий код.

$regex['php'] = '/(src|href)(\s*)?=(\s*)?(\"|\')\/([^\/].*?)\4/';

$php = htmlspecialchars(file_get_contents(sprintf('/home/x/x/x/x/x/%s.%s', $string,    $extension)));                                                  echo $php;

 if (preg_match_all($regex['php'], $php, $out)){
    echo sizeof($out);
    echo nl2br(print_r($out, true));
 } else {
    echo 'Doesn\'t work';
 }

1 Ответ

1 голос
/ 19 сентября 2011

Я думаю, что проблема связана с вызовом htmlspecialchars ().

Как указано в документации PHP

Выполнены следующие переводы:

  • '&' (амперсанд) становится '&'
  • '"' (двойная кавычка) становится '"'
  • , когда ENT_NOQUOTES не установлен.«'» (одинарная кавычка) становится' '' только
  • , если задано ENT_QUOTES.'<' (меньше чем) становится '<' '>' (больше чем) становится '>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...