2017-09-08 15 views
-1

いくつかの変数でpreg_replaceを実行しようとしています。私のコードは以下の通りです:preg_replace with special characters

$ message =ようこそ%% name %%!

おめでとうございます!あなたは今、若者の開発専門家のための世界最高のバーチャル教室であるExpert Online Training(EOT)のメンバーです。 EOTを使って、あなたの仕事が%% campname %%で始まる前に、あなたのリーダーシップスキルを盛り上げ、自信を高め、%% campname %%の現場訓練からさらに多くを得ることができます。 EOTロゴEOTをお持ちください。私たちはあなたが忙しいことを知っているので、新しいウェブサイトはモバイルフレンドリーです。 EOTビデオを見たり、スマートフォン、タブレット、ラップトップでWi-Fi接続してクイズをすることができます。カフェ、図書館、学生ラウンジに座っている間に、行動管理、リーダーシップ、監督、ゲーム、安全についてもっと学ぶことを想像してみてください!

%% directornameは%%だけでこれらのログイン資格情報を使用して、あなたのアカウントを作成しました:

%% %%たLogInInfo

EOTのイントロのVIDを見て、ログインするには、こちらをクリックしてください。

いつ終了するのですか?理事は通常、現場に到着する前にスタッフがオンライン学習の割り当てを完了するように要求します。あなたの任務の期日をまだ受け取っていない場合は、%% directorname %%で確認してください。あなたのコースを移動するとき、%% directorname %%はあなたの進捗状況とクイズスコアを追跡できる電子ダッシュボードにアクセスします。

$loginInfo = 'Username: ' . $email . '<br/>'; // Login Information 
    $loginInfo .= 'Password: ' . $password; 
    $name = $first_name . ' ' . $last_name; 
    $campname = get_the_title($org_id); // the camp name 
    $vars = array(
     'name' => $name, 
     'email' => $email, 
     'your_name' => $directorname, 
     'logininfo' => $loginInfo, 
     'directorname' => $directorname, 
     'campname' => $campname, 
     'numvideos' => NUM_VIDEOS, 
); 

    /* Replace %%VARIABLE%% using vars*/ 
    foreach($vars as $key => $value) 
    { 
    $message = preg_replace('/%%' . $key . '%%/', $value, $message); 
    } 
    echo $message; //send message 

$の電子メールは、$パスワード、$ FIRST_NAME、LAST_NAME $、$ LOGININFO、$ directornameと$ campnameは、すべてのスクリプトで使用できます。 "$"の後ろに数字があるので、例えば "man $ 1er"のようなパスワードが "maner"に置き換えられると、すべてが正しく置き換えられます。パスワードの「$ 1」または「$ 2」は削除されます。 "Ch33tos $ 1"のような特殊文字と数字が含まれている可能性がある安全なパスワードを使用している場合、正しいパスワードに置き換えられるようにするにはどうすればいいですか?

+1

なぜpreg_replaceを使用しますか?パターンはありません。文字列を置換するだけです。あなたは正確な開始単語を知っていて、str_replaceだけを変数に入れて終了単語を持っています。 – Andreas

+0

https://stackoverflow.com/help/mcve – Sammitch

+1

質問をフォーマットできますか? '$ message'の文字列は引用符で囲まれ、コードブロック内にあるはずです。 – chris85

答えて

1

実際に配列をループする必要はありません。
Str_replaceは配列を受け入れます。
アレイ内の各キーの先頭と末尾に%%を追加すると、このコードがすべてを置き換えます。

$vars = array(
    '%%name%%' => $name, 
    '%%email%%' => $email, 
    '%%your_name%%' => $directorname, 
    '%%logininfo%%' => $loginInfo, 
    '%%directorname%%' => $directorname, 
    '%%campname%%' => $campname, 
    '%%numvideos%%' => NUM_VIDEOS); 


$message = str_replace(array_keys($vars) , $vars , $message); 

あなたはまだあなたが文字列で$をエスケープする必要があるにpreg_replace使用したい場合は実施例https://3v4l.org/T8YGs


についてはこちらを参照してください。
例として、このregex101を参照してください。 https://regex101.com/r/BRJDCV/1

1

http://php.net/str_replace

例:使用してstr_replaceほうが良いことは

/* Replace %%VARIABLE%% using vars*/ 
foreach($vars as $key => $value) 
{ 
    $message = str_replace('%%' . $key . '%%', $value, $message); 
} 

これは、パスワードに特殊文字を持つすべての問題を防ぐ必要があります。

あなたの質問は指定されていませんが、メールでこのメッセージを送信する場合は、でないといいです。はメールでパスワードを送信してください。電子メールは安全な媒体ではありません。