我有自己的SEO功能,用于将字符串中的单词替换为可点击链接,这是函数
function myseo($t){
$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$a = array('computer','films', 'playstation');
$uu = count($a);
$theseotext = $t;
for ($i = 0; $i < $uu; $i++) {
$theseotext = str_replace($a[$i], '<a href="'.$url.'" title="'.$a[$i].'">'.$a[$i].'</a>', $theseotext);
}
return $theseotext;
}
它在字符串中工作得很好但是当字符串中有图像时,此图像有ALT =“”或somtime TITLE =“”代码出错并且图像没有显示。
此图像在执行seo功能之前:
<img src="mypic.jpg" alt="this is my computer pic" title="this is my computer pic" />
执行seo功能后的图像
<img src="mypic.jpg" alt="this is my <a href="index.php" title="computer">computer</a> pic" title="this is my <a href="index.php" title="computer">computer</a>pic" />
有没有办法让代码在TITLE或ALT中不替换单词。
答案 0 :(得分:0)
您无法使str_replace
方法对上下文敏感。像往常一样使用DOM解析器显然有点过分。但简单的解决方法是仅在现有标签之间过滤文本内容。
意味着您需要围绕现有的重写函数进行包装调用。这可能就足够了:
$html = preg_replace_callback('/>[^<>]+</', 'myseo', $html);
// Will miss text nodes before the first, or after the last tag.
您必须稍微调整回调:
function myseo($t) {
$theseotext = $t[0];