PHP разбирает части mysql в качестве переменной на preg_replace - PullRequest
1 голос
/ 02 апреля 2012

У меня есть несколько флагов, которые я храню в своей базе данных mysql, чтобы я мог динамически генерировать ссылки и теги заголовков, используя следующий код;однако, кажется, что что-то разбирается со знаком доллара в качестве переменной.

foreach($result as $value){
    $id = $value['id'];
    $title = $value['title'];
    $synopsis = $value['synopsis'];

    $synopsis = preg_replace('/<!--TITLE-->/', $title, $synopsis);
}

Так что если заголовок «500 000 долларов, пожертвованных бла-бла», то будет выведено «0 000 пожертвованных бла-бла».Как я могу заставить его не разбирать это?Я не могу сохранить значение ascii &#36; в базе данных для этого конкретного случая.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

preg_replace просматривает вторую строку и, если видит $, обрабатывает ее и цифры, которые следуют, как ссылку на группу захвата с этим номером. (Это только первые две цифры; число колеблется от 0 до 99.) И так как у вас нет 50-й группы захвата, он интерпретирует $50 как ничто.

Если вы просто хотите найти и заменить известную строку, а не шаблон, попробуйте использовать str_replace вместо preg_replace. У него нет таких ошибок.

1 голос
/ 02 апреля 2012

$ знак в preg_replace определяет скобки в регулярных выражениях. Тогда $ 50 означает 50-ые скобки в $ pattern. Это похоже на \ 50 в preg_replace. см http://us.php.net/manual/en/function.preg-replace.php

Пожалуйста, попробуйте

foreach($result as $value){
    $id = $value['id'];
    $title = preg_replace('@\\\\(\d+)@' ,'\\\\\\\\$1', preg_replace("/\\$/","&#36;",$value['title']));      
   $synopsis = $value['synopsis'];
    $synopsis = preg_replace('/<!--TITLE-->/', $title, $synopsis);
}
...