关于网友提出的“substr_replace替换问题”问题疑问,本网通过在网上对“substr_replace替换问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:substr_replace替换问题
描述:
本帖最后由 Solmyr_biti 于 2016-04-28 00:18:01 编辑
写了一个小程序,想把网站文章中出现的关键词自动加链接,并且当关键词出现多次时只替换一次,与是用到了strpos()及substr_replace实现了此功能,代码如下:
function keywords_autolink($content) {
$keywords=array(
'企业管理书籍' => '企业管理书籍',
'企业管理' => '企业管理书籍',
'管理学书籍' => '管理学书籍',
'管理书籍' => '管理书籍',
'管理类书籍' => '管理类书籍',
'市场营销' => '市场营销',
'职场' => '职场'
);
$keys=array_keys($keywords);
foreach ($keys as $k) {
$pos=strpos($content, $k);
if ($pos !== false) {
// Nothing found
$length=strlen($k);
$c />
//$content是文章内容,$keywords[$k]需要替换成的内容,$pos替换开始的位置,$length数出要从开始的位置算起要替换的词有多长。
unset($k);//最后销毁一下哦。
}
}
return $content;
}
add_filter('the_content', 'keywords_autolink');
但现在的一个问题是,当同时出现两个需要替换的词时就会乱套,比如,企业管理书籍和企业管理同时出现了,即“企业管理书籍企业管理'”,那么这时候替换结果就成了:
企业管理书籍" target="_blank">企业管理书籍
请问这种问题如何解决呀?大概知道用排序法什么的,可是不太懂,还望前辈们指点下,谢谢了!
解决方案1:
function keywords_autolink($content) {
$keywords=array(
'企业管理书籍' => '企业管理书籍',
'企业管理' => '企业管理书籍',
'管理学书籍' => '管理学书籍',
'管理书籍' => '管理书籍',
'管理类书籍' => '管理类书籍',
'市场营销' => '市场营销',
'职场' => '职场'
);
/*
$keys=array_keys($keywords);
foreach ($keys as $k) {
$pos=strpos($content, $k);
if ($pos !== false) {
// Nothing found
$length=strlen($k);
$c />
//$content是文章内容,$keywords[$k]需要替换成的内容,$pos替换开始的位置,$length数出要从开始的位置算起要替换的词有多长。
unset($k);//最后销毁一下哦。
}
}
*/
$keys = array_keys($keywords);
$tmpReplace = [];
foreach($keys as $k=>$v){
$tmpReplace[] = $tmp = '['.$k.']';
}
$content = str_replace($keys,$tmpReplace,$content);
$content = str_replace($tmpReplace,array_values($keywords),$content);
return $content;
}
echo keywords_autolink('企业管理书籍哈哈企业管理呵呵企业管理');
以上介绍了“substr_replace替换问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/948433.html