1

我以为两行代码和一个函数的简单实现,结果却失败了。

在我的网页上,我希望能够输入[text]1[/text],它会做的是提取该 ID 的标题。

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

所以,这是一个可爱的小问题:正如人们所知,我正在调用一个带有数字标题变量的函数,这在引号中效果很好,但正如我们所知,PHP 不喜欢这样。所以,我选择了一个命名组。使用$regs['id']失败。

难道我做错了什么?

我会以错误的方式解决这个问题吗?

4

1 回答 1

1

好吧,你肯定会以一种与我以往完全不同的方式来做这件事,但我认为离你正在尝试的事情不远的事情可能会奏效。试试这个:

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';
}

getTextTitle()顺便说一句,除非我不知道发生了其他事情,否则您的原始文件会允许任何人通过 SQL 注入对您的数据库做任何他们喜欢的事情。别客气。

另外,我不知道(?P<id>正则表达式中的噪音是什么,所以我假设出于某种原因需要它并不管它。我不知道这是否正确。

于 2009-06-11T01:33:50.880 回答