PHP, ошибка preg_match_all ошибка неизвестный модификатор? - PullRequest
0 голосов
/ 15 сентября 2011

Я получаю следующую ошибку

[13-Sep-2011 07:26:28] PHP Warning:  preg_match_all() [<a 
href='function.preg-match-all'>function.preg-match-all</a>]: Unknown 
modifier 'w' in D:\domains\wwwroot\php\search.php on line 274

Значение поиска "repair a pst"

$text1 = $result['ProgramName'] . " " . $result['ProgramVersion'];
$keywords1 = explode(" ",stripslashes($search));
foreach ($keywords1 as $k){
    preg_match_all("/$k/i",$text1,$matches);
    foreach ($matches[0] as $m){
    $text1 = preg_replace("/$m/", '<span class="highlight">'.$m.'</span>', $text1);
    }
}

Я действительно очень озадачен, в чем проблема?

Ответы [ 3 ]

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

Вы создаете произвольные строки регулярных выражений, вставляя то, что в данный момент $ k. Если $ k содержит метасимволы регулярных выражений, вы получите эквивалент регулярных выражений атак инъекций SQL. Вам нужно использовать preg_quote() для очистки $ k:

preg_match_all("/" . preg_quote($k) . "/i", $text1, $matches);'
1 голос
/ 15 сентября 2011

$ k или $ m включает /w, вероятно. Вы должны сбежать от них

$m = str_replace('/', '\\/', $m);
$k = str_replace('/', '\\/', $k);
0 голосов
/ 15 сентября 2011

Одно из ключевых слов содержит косую черту.

Это приводит к преждевременному завершению вашего регулярного выражения (с этой косой чертой), а следующий символ (в данном случае w) интерпретируется как недопустимый модификатор.

Решение: позвоните preg_quote() по ключевым словам, прежде чем добавлять их в регулярное выражение.

...