【发布时间】:2026-01-22 08:40:01
【问题描述】:
在 PHP 中,我有一个字符串 $string 和一个数组 $acronyms(格式为 "UK" => "United Kingdom")。
现在我想用一些 HTML 标签替换 $string 中的所有首字母缩写词。例如Hello UK 应该变成Hello <acronym title="United Kingdom">UK</acronym></pre>
我是这样做的:
foreach($acronyms as $acronym => $tooltip){
$string = preg_replace('/'.$acronym.'/i', ''.$acronym.'', $string);
}
问题是:假设我有一个文本Hello UK,并且有一个数组将“UK”替换为“United Kingdom”,将“Kingdom”替换为“RandomWord”。然后文本将替换为Hello <acronym title="United <acronym title="RandomWord">Kingdom</acronym>">UK</acronym>,这显然是混乱的。
所以问题是:如何让我的 preg_replace 只查找不在 <acronym> 标签内的单词?(既不在标题属性中,也不在标签本身内)
编辑:根据响应进行第二次尝试(因为我无法回复代码)。仍然是同样的问题,首字母缩略词中的文本被第二次替换......
foreach($acronyms as $acronym => $tooltip){
$acronyms[$acronym] = '<acronym title="'.$tooltip.'">'.$acronym.'</acronym>';
}
$string = str_ireplace(array_keys($acronyms), array_values($acronyms), $string);
【问题讨论】:
-
先去掉所有首字母缩写词,然后再添加。
-
哦,通常这样的替换要么在客户端(根据 Javascript)上完成,要么以不改变源的方式完成。那么你的问题就不会出现。
标签: php regex preg-replace acronym