0

我用我的表格对此进行编码以替换 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 没有问题)但没有替换.. 有什么问题?

4

2 回答 2

2

问题是循环的每次迭代都会替换变量$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);
于 2013-11-14T04:48:59.187 回答
1

你可以试试这个,因为 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;
于 2013-11-14T04:50:58.837 回答