2016-04-14 2 views
2

Joomlaのフォームで生成されたメールの件名/本文を抽出する必要があります。 私はのように、言語ごとに異なる被験者/体を定義するためのいくつかのタグを使用しています:メールの件名と本文のpreg_match

$msgSubject = $template->subject;   
    if ($language=='it-IT') 
    {            
    preg_match('~{lang it}([^{]*){/lang}~i', $msgSubject, $match); 
    $msgSubject=($match[1]); 
    } 
    elseif ($language=='en-GB') 
    { 
    preg_match('~{lang en}([^{]*){/lang}~i', $msgSubject, $match); 
    $msgSubject=($match[1]); 
    } 

などのために:

{lang en}English Text{/lang} 
{lang it}Italian Text{/lang} 
{lang fr}French Text{/lang} 

私は、異なる言語の被験者からストライピングテキストのための次のコードを持っています他の言語。 電子メールの件名には完全に機能しますが、これは単なるテキストです。 私は体に同じことを行う場合は、ウィッヒは、p及びBRのようなHTMLのelemnesを含む文字列である、というように、それは動作しません.... コードサンプル:

$msgBody = $template->body; 

        if ($language=='it-IT') 
        { 
        preg_match('~{lang it}([^{]*){/lang}~i', $msgBody, $match); 
        $msgBody=($match[1]); 

        } 
        elseif ($language=='en-GB') 
        { 
        preg_match('~{lang en}([^{]*){/lang}~i', $msgBody, $match); 
        $msgBody=($match[1]); 
        } 

それは単に何も出力しません。 preg_match関数でHTMLタグの重大さを避けるために何を変更する必要がありますか?

+0

if文の前にvar_dump($ msgBody)をチェックできますか?あなたのコードがhtmlタグで動作していることをテストしました。 –

+0

私もそれをテストし、それが動作しているように見えます。私は、体内で生成されたhtmlコードの行を調べようとします。 – Antonio

答えて

1

preg_match_allをクリックしてください
これはあなたの欲しいものですか?私の作品..

http://www.phpliveregex.com/p/fkB

編集: あなたはこのように行う場合:
http://www.phpliveregex.com/p/fkF
あなたはあまりにも言語をキャプチャし、あなたがIFSを必要としません。

+0

私は最後に逃げるのを忘れていました}。それは動作しますが、常に動作するようにエスケープする必要があります。 – Andreas

+0

実際に、それは私が第二の例で行ったように、HTML http://www.phpliveregex.com/p/fkH – Antonio

+0

@Antonioの私の実際の行は、その後の答えを受け入れる;-)が、参照するpreg_matchテスト 上で動作しますそれが必要な場合は、言語を取得することもできます。または、それが必要でない場合は、各言語に対してifを必要としません。私がpreg_match_allを使用したのは、すべての言語とすべての(おそらく)htmlタグで動作することを示すためでした。 – Andreas

2

私はあなたのコードをチェックしており、htmlコードでもうまく動作しています。しかし、私はあなたがjoomlaで使用している複数のタグを含む$ msgBodyと思う。 あなたがするpreg_matchの試合のみ最初のoccuranceためのコード

preg_match_all('~{lang it}([^{]*){/lang}~i', $msgBody, $match); 

の下に使用する必要があります。

+0

それは間違いなくJoomla/Componentタグの中にあります。 HTMLには中括弧がいくつかあります(コンポーネントによってプレースホルダとして使用されます)。中かっこを取り除くとOKです。 – Antonio