2016-04-14 23 views
2

Joomla'da bir form tarafından oluşturulan e-posta mesajının konu/gövdesini almam gerekiyor. ben gibi, her dil için farklı konuların/bedeni tanımlamak için bazı etiketler kullanıyorum: preg_match konu ve e-posta adresi için

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

Ben farklı dillerde Konulardan şeritleme Metin aşağıdaki kod: vb

$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]); 
    } 

ve için Diğer diller. Sadece düz metin olan e-postaların konuları için mükemmel çalışır.

$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]); 
        } 

basitçe hiçbir şey verir: Ben Gövde aynı yaparsanız , hangi p ve br, vb, çalışmıyor gibi HTML elemnes .... kod örneği içeren bir dizedir . HTML etiketleriyle toplu işlemden kaçınmak için preg_match işlevinde neleri değiştirmeliyim?

+0

Açıklamadan önce var_dump ($ msgBody) öğesini kontrol edebilir misiniz? Kodunuzu test ettim, html etiketleri ile çalışıyor. –

+0

Ben de test ettim ve çalışıyor gibi görünüyor. Vücutta üretilen html kodunun satırını incelemeye çalışacağım .... – Antonio

cevap

1

Tıklayın preg_match_all
İstediğiniz bu mu?
http://www.phpliveregex.com/p/fkF
Sen de dilini yakalamak ve IFS gerekmez: Eğer böyle yaparsanız : .. benim için

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

Düzenleme çalışır.

+0

Sonuncudan kaçmayı özlediğimi görüyorum}. Çalışıyor ama her zaman çalıştığından emin olmak için kaçmalı. – Andreas

+0

aslında bu html benim asıl satır göreceksiniz preg_match testi çalışır http://www.phpliveregex.com/p/fkH – Antonio

+0

@Antonio sonra cevabı kabul ;-) ama ikinci örnekte olduğu gibi Eğer gerekli ise dili de alabilirsiniz. Ya da ihtiyaç yoksa, o zaman her dil için hala bir şeye ihtiyacınız olmaz. Preg_match_all kullanmamın nedeni, tüm dillerde ve tüm (belki) html etiketlerinde çalıştığını göstermekti. – Andreas

2

Kodunuzu kontrol ettim ve ayrıca html koduyla da çalışıyor. Ama sanırım joomla ile kullandığınız birden fazla etiket içeren $ msgBody. böylece kodunun altına

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

çünkü preg_match maçı sadece ilk oluşumu şiddetli kullanmalıdır.

+0

Thats kesinlikle Joomla/Bileşen etiketleri içinde bir şey. HTML'de başka bir küme parantezleri vardır (bir bileşen tarafından yer tutucu olarak kullanılır). Kıvrımlı parantezleri kaldırırsam Tamam çalışır. – Antonio