У меня есть электронная почта, где пользователь пишет сообщение, и он отправит сообщение. Основная проблема, которую я только что нашел, рассмотрим этот код
$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"