我想用文本中的名称替换为该个人资料的链接。
$text = "text with names in it (John) and Jacob.";
$namesArray("John", "John Plummer", "Jacob", etc...);
$LinksArray("<a href='/john_plom'>%s</a>", "<a href='/john_plom'>%s</a>", "<a href='/jacob_d'>%s</a>", etc..);
//%s shout stay the the same as the input of the $text.
但如果有必要,可以更改de array。
我现在使用str_replace中的2个数组。像这样$text = str_replace($namesArray, $linksArray, $text);
但替换喊名称的名称带有“点”或“)”或者在结尾或开头的任何类似的东西。如何让替换工作在这样的文本上。
输出喊叫为"text with names in it (<a.....>John</a>) and <a ....>Jacob</a>."
答案 0 :(得分:1)
尝试类似
的内容$name = 'John';
$new_string = preg_replace('/[^ \t]?'.$name.'[^ \t]/', $link, $old_string);
PHP的preg_replace接受混合模式和主题,换句话说,你可以提供像这样的模式数组和替换数组。
答案 1 :(得分:1)
以下是单个名称的示例,您需要对数组中的每个元素重复此操作:
$name = "Jacob";
$url = "<a href='/jacob/'>$1</a>";
$text = preg_replace("/\b(".preg_quote($name, "/").")\b/", $url, $text);
答案 2 :(得分:1)
完成,没有正则表达式:
$text = "text with names in it (John) and Jacob.";
$name_link = array("John" => "<a href='/john_plom'>",
"Jacob" => "<a href='/jacob'>");
foreach ($name_link as $name => $link) {
$tmp = explode($name, $text);
if (count($tmp) > 1) {
$newtext = array($tmp[0], $link, $name, "</a>",$tmp[1]);
$text = implode($newtext);
}
}
echo $text;
每个给定的输入链接永远不会改变,所以我不确定我是否理解你的问题。但我已经测试了这个,它适用于给定的字符串。要扩展它,只需在$name_link
数组中添加更多条目。
答案 3 :(得分:0)
寻找正则表达式。类似于preg_replace()。
preg_replace('/\((' . implode('|', $names) . ')\)/', 'link_to_$1', $text);
请注意,此解决方案采用名称数组,而不仅仅是一个名称。