需要解析HTML文档中的链接——使用像html5lib这样的库或其他东西



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

我认为我需要一种方法来解析网页中的内容链接(存储在MySQL数据库中),在将调整后的页面输出给用户之前,更改页面上所有链接的颜色(所以我也需要能够更改HTML中的链接类)。我读到regex不是找到这些链接的好方法——那么我应该使用库吗?如果是,html5lib对我所做的工作有用吗?

没有必要用PHP HTML解析器来复杂化urself,因为它会破坏并强制"修复"您的输入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,请确保它们是绝对的,否则比较将失败(或更新代码以填写http://current-domain.xxx对于现有的相对URL)。

相关内容

  • 没有找到相关文章

最新更新