preg_replace заменяет знаки $ - PullRequest
       5

preg_replace заменяет знаки $

0 голосов
/ 03 декабря 2008

У меня есть следующий фрагмент кода, который заменяет «маркеры шаблона», такие как% POST_TITLE%, содержимым переменной с именем $ post_title.

function replaceTags( $template, $newtext ) {
    $template = preg_replace( '/%MYTAG%/', $newtext, $template );
    return $template;
}

Проблема в том, что когда в $ post_full есть «$», возвращенный результат удаляет это. Например:

$template = "Replace this: %MYTAG";
$newtext = "I earn $1,000,000 a year";

print replaceTags( $template, $newtext );

// RESULT
Replace this: I earn ,000,000 a year";

Я знаю, что это как-то связано с неправильным экранированием $ 1 в $ newtext. Я пытался использовать preg_quote (), но это не дает желаемого эффекта.

Ответы [ 2 ]

6 голосов
/ 03 декабря 2008

Ммм, так как вы на самом деле не используете там регулярное выражение, почему бы просто не использовать str_replace? Это будет быстрее, и у вас не будет таких странных проблем.

3 голосов
/ 03 декабря 2008

Согласно руководству preg_replace , preg_replace () обрабатывает это ($1) как обратная ссылка .
(а не " синтаксис обратного вызова ", как упомянуто в комментариях на странице руководства preg_replace.
Спасибо Ян Гойваертс ).

$newtext = preg_replace("!" . '\x24' . "!" , '\\\$' , $newtext );

должен позаботиться о вашем знаке '$'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...