有谁知道我可以在 CKEditor 中的哪个位置设置,所以添加的所有链接都将具有 rel="nofollow",即使用户没有指定它?
问问题
2951 次
4 回答
8
您可以按照此页面中的说明创建一个数据过滤器来检查每个链接: http ://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor
这个(未经测试的)代码应该或多或少是你需要的:
editor.dataProcessor.htmlFilter.addRules(
{
elements :
{
a : function( element )
{
if ( !element.attributes.rel )
element.attributes.rel = 'nofollow';
}
}
});
于 2011-08-03T17:56:27.453 回答
0
需要包装:
editor.on('instanceReady',function(){...})
于 2012-03-06T05:03:23.580 回答
0
将代码放在加载ckeditor的页面上
CKEDITOR.on('dialogDefinition', function(ev) {
var editor = ev.editor;
editor.dataProcessor.htmlFilter.addRules(
{
elements :
{
a : function( element )
{
if ( !element.attributes.rel )
element.attributes.rel = 'nofollow';
}
}
});
})
于 2015-07-15T09:08:30.257 回答
0
我将 PHP Codeigniter 与 CKEditor 一起使用,如果您只想为外部链接添加 rel="nofollow",您可以在将 CKEditor 的输出保存到数据库之前对其进行修改。这里是我用来修改的PHP函数:
function addNofollow($content) {
$dom = new DOMDocument();
@$dom -> loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
$x = new DOMXPath($dom);
// Add rel="nofollow"
foreach ($x -> query("//a") as $node) {
$href = $node -> getAttribute("href");
if (!strpos($href, site_base())) {
$node -> setAttribute("rel","nofollow");
} else {
$node -> removeAttribute("rel");
}
}
// Remove <script> tag
$script = $dom->getElementsByTagName('script');
$remove = [];
foreach ($script as $item) {
$remove[] = $item;
}
foreach ($remove as $item) {
$item -> parentNode -> removeChild($item);
}
$newHtml = $dom -> saveHtml($dom->getElementsByTagName('div')->item(0));
return $newHtml;
}
于 2016-10-22T14:39:55.170 回答