0

我是一个非常新手的网页构建器,目前正在创建一个需要根据目标页面更改链接颜色的网站。链接将根据某些用户输入标准分类为不同的类别(例如好、坏、中性)——例如,用户感兴趣的内容链接为蓝色,用户(可能)不想看到的内容被着色为普通文本等。

我认为我需要一种方法来解析网页的内容链接(存储在 MySQL 数据库中),更改页面上所有链接的颜色(因此我还需要能够更改 HTML 中的链接类)在将调整后的页面输出给用户之前。我读到正则表达式不是找到这些链接的好方法——所以我应该使用一个库,如果是这样,html5lib 对我正在做的事情有好处吗?

4

1 回答 1

2

没有必要让 PHP HTML 解析器复杂化,它会破坏并强制“修复”您的输入 HTML。

以下是如何将 PHP 与 javascript 结合使用,完整的工作和经过测试的解决方案:

<?php
$arrBadLinks=array(
    "http://localhost/something.png",
    "https://www.apple.com/something.png",
);
$arrNeutralLinks=array(
    "http://www.microsoft.com/index.aspx",
    "ftp://samewebsiteasyours.com",
    "ftp://samewebsiteasyours.net/file.txt",
);
?>
<html>
    <head>
        <script>
        function colorizeLinks()
        {
            var arrBadLinks=<?php echo json_encode($arrBadLinks);?>;
            var arrNeutralLinks=<?php echo json_encode($arrNeutralLinks);?>;

            var nodeList=document.getElementsByTagName("*");
            for(var n=nodeList.length-1; n>0; n--)
            {
                var el=nodeList[n];

                if(el.nodeName=="A")
                {
                    if(arrBadLinks.indexOf(el.href)>-1)
                        el.style.color="red";
                    else if(arrNeutralLinks.indexOf(el.href)>-1)
                        el.style.color="green";
                    else
                        el.style.color="blue";
                }
            }
        }

        if(window.addEventListener)
            window.addEventListener("load", colorizeLinks, false);
        else if (window.attachEvent)
            window.attachEvent("onload", colorizeLinks);
        </script>
    </head>
    <body>
        <p>
            <a href="http://www.microsoft.com/index.aspx">Neutral www.microsoft.com/index.aspx</a>
        </p>
        <p>
            <a href="http://localhost/something.png">Bad http://localhost/something.png</a>
        </p>
    </body>
</html>

不适用于相对 URL,请确保将它们设为绝对,否则比较将失败(或更新代码以填写现有相对 URL 的http://current-domain.xxx)。

于 2012-09-07T15:31:15.927 回答