preg_replace, вызывающий удаление знаков доллара

У меня есть электронная почта, где пользователь пишет сообщение, и он отправит сообщение. Основная проблема, которую я только что нашел, рассмотрим этот код

$findEmail = $this->Data->field('body', array('id' => 1610)); //$getUserEmailTemplate will take frm dbase and eg: //Hi, @@MESSAGE@@. From: StackOverflow //It should change @@MESSAGE@@ part to data from $findEmail (in this example is the $74.97 ...) $getUserEmailTemplate = $findUser['User']['email_template']; $emailMessage = preg_replace('/\B@@MESSAGE@@\B/u', $findEmail, $getUserEmailTemplate); debug($findEmail); debug($emailMessage); 

и рассмотрим этот ввод для сообщения электронной почты для $ findemail result:

 $74.97 $735.00s 

$ email Сообщение приведет к:

 .97 5.00s 

Как я могу это исправить? Я чувствую, что есть проблема с моим шаблоном preg_replace.

Шаблон пользователя может быть любым, если есть @@ MESSAGE @@, который будет изменен на вход пользователя.

спасибо

Предварительно проанализируйте заменяющий текст, чтобы избежать $ за которым следует число (помните, что $n имеет особое значение при использовании в заменяющем тексте). См. Комментарий на странице документов php.net:

Если есть шанс, что ваш текст замены содержит любые строки, такие как «$ 0.95», вам нужно будет избежать этих $ n обратных ссылок:

 <?php function escape_backreference($x){ return preg_replace('/\$(\d)/', '\\\$$1', $x); } ?> 

Если (когда-либо) шаблон находился в $getUserEmailTemplate , вы перезаписывали (уничтожали) эту строку;

 $getUserEmailTemplate = "@@MESSAGE@@"; 

Так что просто удалите эту строку и убедитесь, что $getUserEmailTemplate действительно содержит что угодно и лучше всего шаблон.

Угадайте, что ваш шаблон содержит только «чистый» PHP и пытается использовать переменную $ 74 как переменную, которая не существует и не содержит никаких данных. Поэтому измените кавычки в шаблоне на одинарные кавычки ' .

угаданный шаблон:

 $tpl = "Sum: $74.97"; //results in "Sum: .97" 

исправленный шаблон:

 $tpl = 'Sum: $74.97'; //results in "Sum: $74.97"