Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ошибка preg_match
Форумы портала PHP.SU » » Вопросы новичков » Ошибка preg_match

Страниц (1): [1]
 

1. ppos_kat - 27 Февраля, 2015 - 12:18:30 - перейти к сообщению
На сайте выскочила ошибка:
Warning: preg_match() [function.preg-match]: Unknown modifier 'n' in /home/www/тут указан путь/имя файла.php on line 204

Warning: preg_match() [function.preg-match]: Unknown modifier 'n' in /home/www/тут указан путь/имя файла.php on line 205


Вот часть кода на которую ссылается ошибка:
PHP:
скопировать код в буфер обмена
  1. if ( preg_match("#^$match#", $request_match, $matches) ||
  2.                                                 preg_match("#^$match#", urldecode($request_match), $matches) ) {


Если я правильно понимаю но не правильно прописана функция
PHP:
скопировать код в буфер обмена
  1. preg_match("#^$match#", $request_match, $matches)


Помогите, пожалуйста, разобраться. Что здесь не так? Изначально была ссылка на блок информации на странице (что-то вроде якоря)
2. GoDr - 27 Февраля, 2015 - 12:33:34 - перейти к сообщению
ppos_kat, что у тебя в $match
3. OrmaJever - 27 Февраля, 2015 - 12:35:43 - перейти к сообщению
У вас в $match попался символ #, можно попробовать preg_quote(), но скорее всего # он не будет экранизировать. заменяйте её вручную через str_replace
4. GoDr - 27 Февраля, 2015 - 12:40:00 - перейти к сообщению
OrmaJever, прежде чем что-то заменять, нужно знать что там и для чего нужно Закатив глазки Иначе можно просто сделать так
5. ppos_kat - 27 Февраля, 2015 - 12:56:24 - перейти к сообщению
GoDr пишет:
OrmaJever, прежде чем что-то заменять, нужно знать что там и для чего нужно Закатив глазки Иначе можно просто сделать так


Попробовал, не помогло
Ссылка из меню идет вот на этот блок
PHP:
скопировать код в буфер обмена
  1.  <div id="khook_1" class="kgroup">
  2. содержание блока
  3. </div>


вот полностью код на ссылку якорь
PHP:
скопировать код в буфер обмена
  1. foreach ( (array) $rewrite as $match => $query ) {
  2. // If the requesting file is the anchor of the match, prepend it to the path info.
  3.         if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request )
  4.                 $request_match = $req_uri . '/' . $request;
  5.  
  6.         if ( preg_match("#^\Q".$match."\E#", $request_match, $matches) ||
  7.                 preg_match("#^$match#", urldecode($request_match), $matches) ) {
  8.  
  9.              if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) {
  10.                 // This is a verbose page match, let's check to be sure about it.
  11.                      if ( ! get_page_by_path( $matches[ $varmatch[1] ] ) )
  12.                          continue;
  13.                      }
  14.  
  15.                      // Got a match.
  16.                      $this->matched_rule = $match;
  17.                      break;
  18.              }
  19. }

Может это поможет разобраться. Не знаю что еще кинуть
6. GoDr - 27 Февраля, 2015 - 13:18:29 - перейти к сообщению
ppos_kat, а я ведь сначала спросил что у тебя в этой переменно, а не предложил экранировать Улыбка

Просто выведи её на экран и покажи.. т.е.
PHP:
скопировать код в буфер обмена
  1. foreach ( (array) $rewrite as $match => $query ) {
  2.     echo $match. '<br>';
  3. }

(Добавление)
.
и кстати, ты в одном месте поменял, а в другом нет
7. LIME - 27 Февраля, 2015 - 15:26:56 - перейти к сообщению
GoDr спорим OrmaJever прав?
8. Мелкий - 27 Февраля, 2015 - 15:40:53 - перейти к сообщению
OrmaJever пишет:
можно попробовать preg_quote(), но скорее всего # он не будет экранизировать

С чего это?
Тупой итератор по строке, подставляющий \ перед символами, определёнными в исходнике функции статично и, в добавок, указанному в необязательном втором аргументе.
9. LIME - 27 Февраля, 2015 - 15:44:26 - перейти к сообщению
дада Мелкий
вот этот момент я и забыл пояснить
экранирование средствами самого PCRE как раз # не обработает
10. GoDr - 27 Февраля, 2015 - 16:49:09 - перейти к сообщению
LIME пишет:
экранирование средствами самого PCRE как раз # не обработает
О как А?! Не знал.. +1

Получается нужно менять

например, на это
PHP:
скопировать код в буфер обмена
  1. ...preg_match('/' . $m . '/'....
11. LIME - 27 Февраля, 2015 - 16:54:15 - перейти к сообщению
GoDr лучше применить ф-цию включив ограничитель в доп параметр
Чтоб уж железно
В твоем случае естественно # не будет экранирован он ведь не спецсимвол
(Добавление)
Ведь никто не гарантирует что в переменной потом не попадется /
(Добавление)
А# используют просто потомучто нагляднее
От палок итак в глаз рябитУлыбка
12. GoDr - 27 Февраля, 2015 - 17:05:58 - перейти к сообщению
да я тоже стал в своё время использовать # только потому, что она достаточно заметна, да и в тексте очень редко используется, особенно в поиске
(Добавление)
.
вот не знаешь где нежданчик подвернётся Радость

 

Powered by ExBB FM 1.0 RC1