我有我的应用程序,允许用户在我的网站上写评论。它工作得很好。我也有工具来插入他们的网页链接在里面。我觉得有自己的网页链接的内容很好。
现在,我想将rel="nofollow“添加到它们已经编写的内容的每个链接中。
我想添加rel="nofollow“使用php,即在保存数据时。
那么,使用php添加rel="nofollow“或使用rel=”So“更新rel="someother”有什么简单方法呢?
一个很好的例子将会非常有效。
发布于 2011-05-01 20:14:56
正则表达式确实不是处理HTML的最佳工具,尤其是在PHP内置了非常好的HTML解析器的情况下。
如果rel属性已经填充,则此代码将处理添加nofollow。
$dom = new DOMDocument;
$dom->loadHTML($str);
$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $anchor) {
$rel = array();
if ($anchor->hasAttribute('rel') AND ($relAtt = $anchor->getAttribute('rel')) !== '') {
$rel = preg_split('/\s+/', trim($relAtt));
}
if (in_array('nofollow', $rel)) {
continue;
}
$rel[] = 'nofollow';
$anchor->setAttribute('rel', implode(' ', $rel));
}
var_dump($dom->saveHTML());CodePad。
生成的超文本标记语言是$dom->saveHTML()格式的。除了它将用html、body元素等包装它之外,所以使用它只提取您输入的HTML...
$html = '';
foreach($dom->getElementsByTagName('body')->item(0)->childNodes as $element) {
$html .= $dom->saveXML($element, LIBXML_NOEMPTYTAG);
}
echo $html;如果您使用的是>= PHP5.3,请将saveXML()替换为saveHTML()并删除第二个参数。
示例
这个HTML..。
<a href="">hello</a>
<a href="" rel="">hello</a>
<a href="" rel="hello there">hello</a>
<a href="" rel="nofollow">hello</a>...is已转换为...
<a href="" rel="nofollow">hello</a>
<a href="" rel="nofollow">hello</a>
<a href="" rel="hello there nofollow">hello</a>
<a href="" rel="nofollow">hello</a>发布于 2016-01-15 18:47:50
我复制了Alex's answer,并将其添加到一个函数中,使链接不会跟随并在新的选项卡/窗口中打开(并添加了对UTF8的支持)。我不确定这是否是最好的方法,但它是有效的(欢迎建设性的意见):
function nofollow_new_window($str)
{
$dom = new DOMDocument;
$dom->loadHTML($str);
$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $anchor)
{
$rel = array();
if ($anchor->hasAttribute('rel') AND ($relAtt = $anchor->getAttribute('rel')) !== '') {
$rel = preg_split('/\s+/', trim($relAtt));
}
if (in_array('nofollow', $rel)) {
continue;
}
$rel[] = 'nofollow';
$anchor->setAttribute('rel', implode(' ', $rel));
$target = array();
if ($anchor->hasAttribute('target') AND ($relAtt = $anchor->getAttribute('target')) !== '') {
$target = preg_split('/\s+/', trim($relAtt));
}
if (in_array('_blank', $target)) {
continue;
}
$target[] = '_blank';
$anchor->setAttribute('target', implode(' ', $target));
}
$str = utf8_decode($dom->saveHTML($dom->documentElement));
return $str;
}只需使用如下所示的函数:
$str = '<html><head></head><body>fdsafffffdfsfdffff dfsdaff flkklfd aldsfklffdssfdfds <a href="http://www.google.com">Google</a></body></html>';
$str = nofollow_new_window($str);
echo $str;https://stackoverflow.com/questions/5848217
复制相似问题