BBCode, preg_replace ve adlandırılmış yakalama grupları

1 Cevap php

Ne iki satır kod ve bir fonksiyonun kolay bir uygulama olacağını düşündüm başarısız yapılmış olduğu ortaya çıktı.

Web sayfamda, ben [text]1[/text] yazın ve ne yapacak kimliği başlığı çekmek olduğunu edebilmek istiyorum.

function textFormat($text) {
    $raw = array(
        '\'\[text\](?P<id>.*?)\[/text\]\'is'
    );

    $out = array (
        '<a href="index.php?function=getData&reference=text&id=$1">' . getTextTitle() . '</a>'
    );

    preg_replace($raw, $out, $text);
    return $text;
}

function getTextTitle($id) {
     $sql = mysql_query("SELECT title FROM text WHERE id = $id");
     return mysql_result($sql);
}

Yani, burada güzel küçük bir sorun var: biri ben tırnak içinde büyük işler sayısal-başlıklı değişken, bir fonksiyon arıyorum, söyleyebilirim, ama bildiğimiz gibi, PHP gibi değil. Yani, bir adlandırılmış grubu için seçti. $regs['id'] çalışma başarısız olur kullanma.

Ben yanlış bir şey yapıyorum?

Ben bu konuda yanlış şekilde gidiyorum?

1 Cevap

Evet, kesinlikle şimdiye kadar olandan bir kökten farklı bir şekilde bunu yapıyoruz, ama ben çok uzakta değil Eğer çalışıyorsanız ne gelen bir şey belki işe yarayabilir düşünüyorum. Bu deneyin:

function textFormat($text) {
    $raw = array(
        '\'\[text\](?P<id>.*?)\[/text\]\'ise'
    );
    $out = array (
        '\'<a href="index.php?function=getData&reference=text&id=$1">\' . getTextTitle(\'$1\') . \'</a>\''
    );
    preg_replace($raw, $out, $text);
    return $text;
}

function getTextTitle($id) {
     $sql = mysql_query("SELECT title FROM text WHERE id = '" . mysql_real_escape_string($id) . "'");
     $res = mysql_result($sql);
     $row = mysql_fetch_array($res);
     return $row ? $row[0] : 'invalid ID';
}

Orijinal getTextTitle(), başka bir şey herkes arada, onlar SQL enjeksiyon yoluyla veritabanına makbul bir şey yapalım, farkında değilim oluyor olmadığı sürece. Bir şey değil.

Ayrıca, o (?P<id> gürültü regex ne olduğunu bilmiyorum, bu yüzden nedense gerekli varsayarak ve yalnız gidiyorum. Ben bu doğru olup olmadığını bilmiyorum.