替换字符串的功能除了需要调整alt的图像

时间:2011-09-23 12:26:29

标签: php

我有自己的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中不替换单词。

1 个答案:

答案 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];