preg ile bbcode tarzı etiketler

1 Cevap php

Tamam, benim forumda bbcode tarzı etiketleri için dize değiştireceğini bir dizi aracılığıyla çalışıyoruz yerine [b] ve ben sorunu olmadan onları doğrudan değiştirmek gibi [i] vb oldukça basittir.

Onlarla ne yapmak gerekir gibi daha karmaşık, bana sorun veriyor iki etiketleri vardır. [quote] ve [url] I kullanıcılara [quote=person_to_quote] ve [url=URL]link text[/url] seçimi, {[(4 vermek istiyorum, ince, ama )]} etiketi çok iç içe olmak mümkün olması gerekir!

Yani açılış etiketi [quote= daha sonra dize eklemek korumak ] alıntı göstermek ve daha sonra [/quote] sona değiştirmek gerekiyor. Ben etiketleri toptan değiştirmek ve =person ince korumak, ama bu beni metne bitiş etiketi ekleyerek hile ve basit yapılır yapabilirsiniz. Ne gerçekten yapabilmek istiyorum bu yüzden ayrı ayrı işleyebilirsiniz = ve ] saklamak arasındaki her şeyi çekmek.

Şu anda, böylece satır içi metin yerine bir dizi ve simplye kullanıyorum:

    "[quote=" is replaced by "<span class=\"quote\">[Quote: ",

ve sadece bunu sonuna geri olmayan yerini metin tokat, bu olsa çirkin. Ne yapmam mümkün istiyorum [quote=person]some text here[/quote] diyerek kodu alın ve içine açmak olduğunu:

    "[quote=" is replaced by "<span class=\"quote\">$person says: ",

$ kişi dinamik değiştirilebilir böylece kişinin adını saklayan bir değişken olacağı yerdir.

Benzer URL'ler ile I [url=link]link text[/url] olarak değiştirin ve url kabul ve çıkış yani inline yerine it mümkün yapmak istiyorum:

"[url=" is replaced by "<a href=$URL>"

html ile bir etiket zaten, url sıyırma sonra yerine sonra saklamak anlamına gelir ki, kapalı.

Peki yöntemi ben = arasındaki metni kaldırmak için kullanabilirim ve kapanış ] Ben yerine diziye geçmek ne öylesine etiketleri geçti ve buna göre modifiye edilebilir. Ayrıca ben span class stil o ilgilenir gibi quotes yuva hakkında endişeli değilim, ama alıntı etiketleri herhangi bir sayı ile başa bir işlev gerekiyor!. Düşünceler lütfen.

EDIT:

Sadece bir güncelleme, ben kod webbiedave bana verdi ve çalışır değiştirilmiş, yapmak istediğim şeyleri çözdük:

$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]/',
create_function(
'$matches',
'return \'<span class="quote">\'.$matches[1].\' says: \';'
),
$comment);

sonra yakın etiketi benim normal etiketi üzerinden alınır zaten sonradan arama değiştirin.

1 Cevap

Try preg_replace_callback:

$output = preg_replace_callback(
        '/\[quote=([^\]]+)?\]([^\[]+)?\[\/quote\]?/',
        create_function(
            '$matches',
            'return \'"[quote=" is replaced by "<span class=\"quote\">\'.$matches[1].\' says: ",\';'
        ),
        '[quote=person]some text here[/quote]'
    );