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