【问题标题】:bbcode & preg_replace not workingbbcode 和 preg_replace 不工作
【发布时间】:2013-11-26 23:40:10
【问题描述】:

我用我的表格编码这个 bbcode 替换:

// BBcode conversion
$message = $this->request->data['Minichat']['message'];
$conversion = array(
    '\[b\](.*?)\[\/b\]' => '<span style="font-weight: bold;">$1</span>',
    '\[i\](.*?)\[\/i\]' => '<span style="font-style: italic;">$1</span>',
    '\[u\](.*?)\[\/u\]' => '<span style="text-decoration: underline;">$1</span>'
);
// Boucle qui mouline les règles précédentes
foreach ($conversion as $k=>$v) {
    $final_message = preg_replace('/'.$k.'/',$v,$message);
}
$final_message = nl2br($final_message);

$final_message 被返回(POST 没有问题)但没有替换.. 有什么问题?

【问题讨论】:

    标签: php preg-replace bbcode


    【解决方案1】:

    问题在于$conversion 循环的每次迭代都会替换$final_message 变量的最后一个实例。一种解决方案是以这种方式命名初始变量:

    $final_message = $this->request->data['Minichat']['message'];
    

    然后在循环中每次都将该变量返回:

    foreach ($conversion as $k=>$v) {
        $final_message = preg_replace('/'.$k.'/',$v,$final_message);
    }
    $final_message = nl2br($final_message);
    

    【讨论】:

      【解决方案2】:

      你可以试试这个,因为 preg_replace 支持数组:

      $message = <<<'LOD'
      [b]La maitresse[/b] demande à [i]Toto[/i] s'il a mangé [u]des épinards[/u] à la cantine
      LOD;
      
      $conv = array(
          '~\[b](.*?)\[/b]~s' => '<span style="font-weight: bold;">$1</span>',
          '~\[i](.*?)\[/i]~s' => '<span style="font-style: italic;">$1</span>',
          '~\[u](.*?)\[/u]~s' => '<span style="text-decoration: underline;">$1</span>'
      );
      
      $final_message = preg_replace(array_keys($conv), $conv, $message);
      
      $final_message = nl2br($final_message);
      
      echo $final_message;
      

      【讨论】:

        猜你喜欢
        • 2011-11-29
        • 2012-04-01
        • 2012-08-24
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 2012-04-03
        相关资源
        最近更新 更多