使用以下代码:
$text = "أطلقت غوغل النسخة المخصصة للأجهزة الذكية العاملة بنظام أندرويد من الإصدار “25″ لمتصفحها الشهير كروم.ولم تحدث غوغل تطبيق كروم للأجهزة العاملة بأندرويد منذ شهر تشرين الثاني العام الماضي، وهو المتصفح الذي يستخدمه نسبة 2.02% من أصحاب الأجهزة الذكية حسب دراسة سابقة. ";
$tags = "غوغل, غوغل النسخة, كروم";
$tags = explode(",", $tags);
foreach($tags as $k=>$v) {
$text = preg_replace("/\b{$v}\b/u","<a href=\"index.php?s=news&tag=$0\">$0</a>",$text, 1);
}
echo $text;
将给出以下结果:
I <a href="index.php?s=news&tag=<a href="index.php?s=news&tag=love">love</a> <a href="index.php?s=news&tag=PHP">PHP</a>">love PHP</a>, but I am <a href="index.php?s=news&tag=facing">facing</a> a problem
请注意,我的文字是阿拉伯语。
方法是一次性完成所有操作。这个想法是建立一个带有标签交替的模式。要使这种方式有效,您必须在对标签进行排序之前,因为正则表达式引擎将在成功的第一个替代项处停止(否则,即使后面紧跟着“ php”,“ love”也将始终匹配,而“ love php”将永远不会匹配) )。
要将替换限制为每个单词的第一次出现,您可以在找到标记后将其从数组中删除,然后测试替换回调函数内部数组中是否始终存在该标记:
$text = 'I love PHP, I love love but I am facing a problem';
$tagsCSV = 'love, love php, facing';
$tags = explode(', ', $tagsCSV);
rsort($tags);
$tags = array_map('preg_quote', $tags);
$pattern = '/\b(?:' . implode('|', $tags) . ')\b/iu';
$text = preg_replace_callback($pattern, function ($m) use (&$tags) {
$mLC = mb_strtolower($m[0], 'UTF-8');
if (false === $key = array_search($mLC, $tags))
return $m[0];
unset($tags[$key]);
return '<a href="index.php?s=news&tag=' . rawurlencode($mLC)
. '">' . $m[0] . '</a>';
}, $text);
注意:建立网址时,您必须编码特殊字符,这就是为什么我使用preg_replace_callback
而不是preg_replace
能够使用的原因rawurlencode
。
如果您必须处理utf8编码的字符串,则需要在模式中添加u修饰符,并需要替换strtolower
为mb_strtolower
)
该preg_split
方法
$tags = explode(', ', $tagsCSV);
rsort($tags);
$tags = array_map('preg_quote', $tags);
$pattern = '/\b(' . implode('|', $tags) . ')\b/iu';
$items = preg_split($pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$itemsLength = count($items);
$i = 1;
while ($i<$itemsLength && count($tags)) {
if (false !== $key = array_search(mb_strtolower($items[$i], 'UTF-8'), $tags)) {
$items[$i] = '<a href="index.php?s=news&tag=' . rawurlencode($tags[$key])
. '">' . $items[$i] . '</a>';
unset($tags[$key]);
}
$i+=2;
}
$result = implode('', $items);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句