如果在php中使用BBcode,替换不起作用

时间:2014-04-08 12:37:00

标签: php replace bbcode

假设,我有一个字符串' @ [52:]非常爱他的母亲'。我希望用“艾伦非常爱他的母亲”来取代字符串'。 说明:当我的字符串中找到任何匹配语法' @ [numeric_id:]'然后这些匹配将被替换为存在的用户名,其中包含' numeric_id'在' user_entry'表。如果在字符串中找到匹配但未找到用户在&user;注册用户中使用numeric_id然后它将返回完整的字符串,如' @ [52:]非常爱他的母亲'。

我尝试用' preg_replace'在PHP中的功能。 '的preg_replace'使用语法' @ [numeric_id:]'成功收集所有匹配项但它无法将匹配发送到名为' test()'的用户定义函数。简而言之,我的代码无效。

我在test.php文件中有以下代码:。

<?php
function test($v) { $con=mysqli_connect("mysql14.000webhost.com","a8622422_jhon","pjdtmw7","a8622422_person");
$safe_id=preg_replace("/[^0-9]/",'',$v);
$sql="SELECT * FROM user_entry WHERE u_id='$safe_id'"; 
$result=mysqli_query($con,$sql);
$count=mysqli_num_rows($result); $found=''; 
 if ($count==1) {
$row=mysqli_fetch_array($result);
$found=$row['name']; 
} else { $found=$v; } return $found;
 } ?>
<?php 
$post='@[61150631867349144:] & @[59670019475743176:] are friends'; 
echo preg_replace('/(@\[[0-9]+\:+\]+)/',test('$1'),$post);  
?>

我认为,代码应该返回:&#39; Baki Billah,Mahfuzur rahman和mahi是朋友&#39;。但它返回:&#39; @ [61150631867349144:]&amp; @ [59670019475743176:]是朋友&#39;。

我该怎么做?我的代码出了什么问题?有什么办法吗?如果用上述代码无法执行操作,那么请给我正确的&amp; test.php文件的完整代码,以便我可以执行我的问题的第一部分中解释的操作。

我们非常感谢任何帮助(我正在使用php)。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果要为正则表达式的每个匹配执行代码,最好的方法是使用preg_replace_callback函数。它可以采用与您现在使用的模式相同的模式,但会为每个匹配调用给定的函数。

例如:

echo preg_replace_callback('/(@\[[0-9]+\:+\]+)/', 'test', $post);

您将需要修改您的测试函数,以获得一系列子匹配。 $v[0]将是整个字符串匹配。