9

ユーザーがメッセージを書くと、メッセージが送信される電子メールシステムがあります。私が見つけた主な問題は、このコードを検討してください

    $findEmail = $this->Data->field('body', array('id' => 1610));

    //$getUserEmailTemplate will take frm dbase and e.g: 
    //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 の結果の電子メールについて、次の入力を検討してください。

$74.97
$735.00s

$email メッセージの結果:

.97
5.00s

どうすればこれを修正できますか? preg_replace パターンに問題があるように感じます。

ユーザーテンプレートは@@MESSAGE@@があれば何でも構いませんが、その部分がユーザーメッセージ入力に変更されます。

ありがとうございました

4

5 に答える 5

13

置換テキストを事前に解析して$、その後に数字が続く場合をエスケープします ($n置換テキストで使用する場合は特別な意味があることに注意してください)。php.net docs ページのコメントを参照してください。

置換テキストに「$0.95」などの文字列が含まれる可能性がある場合は、それらの $n 後方参照をエスケープする必要があります。

<?php
  function escape_backreference($x){
    return preg_replace('/\$(\d)/', '\\\$$1', $x);
  }
?>
于 2013-09-24T23:50:10.533 に答える
0

テンプレートが (これまでに) にあった場合$getUserEmailTemplateは、この行で上書き (破棄) しました。

$getUserEmailTemplate = "@@MESSAGE@@";

したがって、この行を削除して、$getUserEmailTemplate実際にテンプレートが含まれていることを確認してください。

于 2013-09-25T00:09:58.097 に答える
-1

テンプレートに「純粋な」PHP が含まれているだけで、$74 を変数として使用しようとしていると思いますが、これは存在せず、データを保持していません。したがって、テンプレート内の引用符を一重引用符に変更してください'

推測されたテンプレート:

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

修正されたテンプレート:

$tpl = 'Sum: $74.97'; //results in "Sum: $74.97"
于 2013-09-24T23:49:10.163 に答える