2012-07-09 41 views
1

我的問題是retrieveName()沒有獲得$ 1的值,但$ 1在前面的實例中工作得很好。排列中的PHP函數

function bbcode ($string) 
    { 
    // All the default bbcode arrays. 
    $bbcode = array(
    '#\[quote=(.*?)\](.*?)\[/quote\]#si' => 
'<span class="bbcode_quote"><b> 
<a href="userprofile.php?id='.stripslashes('$1').'" target="_blank"> 
<span class="fake_link">'.retrieveName('$1').'</span></a> Said:</b><BR/>$2</span><BR/>' 

    ); 
    $output = preg_replace(array_keys($bbcode), array_values($bbcode), $string); 
    $output = str_replace("\\r\\n", "<br>", $output); 
    return $output; 
    } 

編輯: 沒有帶斜線,我希望它是簡單

function retrieveName($poster_id){ 
$get_name = mysql_query("SELECT * FROM users WHERE userid = 'sanitizeIn($poster_id)'") 
or die(mysql_error()); 
$name_row = mysql_fetch_array($get_name); 
return $name_row['username']; 
} 
function sanitizeIn ($string) { 
$output = mysql_real_escape_string($string); 
return $output; 
} 
+1

可能需要雙轉義,轉換爲「\\\\ 1」,取決於retrieveName()中完成多少級別的處理 – 2012-07-09 04:44:38

+0

執行所有通過的變量編輯retrieveName以\\開頭?如果他們這樣做,爲什麼不傳遞整數值(1),然後在retrieveName函數內附加'\\'? – nbsp 2012-07-09 04:45:21

+0

看裏面'retrieveName'使用可能使用'stripslashes' – Rab 2012-07-09 04:50:32

回答

0

假設你正在使用preg_*功能,你應該,你應該使用$1而不是\\1。兩者都是有效的,但$1是首選語法。

而且,你可能更喜歡下面的一個:

$output = preg_replace("#\[quote=(.*?)\](.*?)\[/quote\]#sie", 
    "'<span class=\"bbcode_quote\"><b><a href=\"userprofile.php?id='.stripslashes('$1').'\" 
    target=\"_blank\"><span class=\"fake_link\">'. 
    retrieveName(stripslashes('$1')) . '</span></a> Said:</b><BR/>$2 
    </span><BR/>'",$input); 

或者:

$output = preg_replace_callback("#\[quote=(.*?)\](.*?)\[/quote\]#si",function($m) { 
    return '<span class="bbcode_quote"><b><a href="userprofile.php?id=\\1" 
    target="_blank"><span class="fake_link">' . 
    retrieveName('\\1') . '</span></a> Said:</b><BR/>\\2 
    </span><BR/>'; 
},$input); 
+0

嘿,謝謝。我在第一篇文章中做了相應的修改。但是$ 1仍然沒有將值傳遞給retrieveName(); – Mike 2012-07-09 05:23:51

0

試試這個方法:

$output = preg_replace_callback("#\[quote=(.*?)\](.*?)\[/quote\]#si",function($matches) { 
    return '<span class="bbcode_quote"><b><a href="userprofile.php?id='.stripslashes($matches[1]).'" target="_blank"><span class="fake_link">' . 
    retrieveName($matches[1]).'</span></a> Said:</b><BR/>'.$matches[2].'</span><BR/>'; 
},$input);