我试图将htmlpurifier配置为只将外部链接显示为纯文本。我使用了displayLinkUri选项,但它将所有链接显示为纯文本。有配置吗?这是我的代码:
$mySite='<a href="http://www.mysite.com/">mysite</a>';
$externalSite='<a href="http://www.external.com/">external</a>';
require_once 'include/htmlpurifier/library/HTMLPurifier.auto.php';
$Config = HTMLPurifier_Config::createDefault();
$Config->set('AutoFormat.DisplayLinkURI', true);
$purifier = new HTMLPurifier($Config);
$mySite= $purifier->purify($mySite);
$externalSite=$purifier->purify($externalSite);
echo $mySite;
echo $externalSite;
输出是
<a>mysite</a> (http://www.mysite.com/)
<a>external</a> (http://www.external.com/)
我希望输出如下:
<a href="http://www.mysite.com/">mysite</a>
<a>external</a> (http://www.external.com/)
更新:
我想保持图像的外部链接不变。我只需要将超链接转换为纯文本。
最佳答案
好的,我成功地向htmlpurifier添加了一个自定义注入器,这里是:
首先,在“include\htmlpurifier\library\htmlpurifier\injector”中创建一个“displayRemoteLinkUri.php”,并将其写入其中
<?php
class HTMLPurifier_Injector_DisplayRemoteLinkURI extends HTMLPurifier_Injector
{
public $name = 'DisplayRemoteLinkURI';
public $needed = array('a');
public function handleElement(&$token) {
}
public function handleEnd(&$token) {
if (isset($token->start->attr['href'])){
$url = $token->start->attr['href'];
if($this->is_remote($url)){
unset($token->start->attr['href']);
$token = array($token, new HTMLPurifier_Token_Text(" ($url)"));
}
} else {
// nothing to display
}
}
public function is_remote($path){
$urlvar = parse_url($path);
$remote_schemes = array("mailto");
$local_schemes = array("javascript");
if(in_array($urlvar["scheme"],$remote_schemes)){
return true;
}else if(in_array($urlvar["scheme"],$local_schemes)){
return false;
}else{
if(empty($urlvar["host"]) || $urlvar["host"]==$_SERVER["HTTP_HOST"]){
return false;
}else{
return true;
}
}
}
}
?>
然后在“include\htmlpurifier\library\htmlpurifier\configschema\schema”中创建另一个名为“autoformat.displayRemoteLinkUri.txt”的文件,并添加以下内容:
AutoFormat.DisplayRemoteLinkURI
TYPE: bool
VERSION: 3.2.0
DEFAULT: false
--DESCRIPTION--
<p>
This directive turns on the in-text display of Remote URIs in <a> tags, and disables
those links. For example, <a href="http://example.com">example</a> becomes
example (<a>http://example.com</a>).
</p>
--# vim: et sw=4 sts=4
在那之后,加上这一行
require 'HTMLPurifier/Injector/DisplayRemoteLinkURI.php';
在下面
require 'HTMLPurifier/Injector/DisplayLinkURI.php';
在include\htmlpurifier\library\htmlpurifier.includes.php中
然后,添加这一行
require_once $__dir . '/HTMLPurifier/Injector/DisplayRemoteLinkURI.php';
在下面
require_once $__dir . '/HTMLPurifier/Injector/DisplayLinkURI.php';
在include\htmlpurifier\library\htmlpurifier.safe-includes.php中
在这些编辑之后,如果文件位于本地,请运行cmd.exe并转到php目录。然后从php.exe运行“include/htmlpurifier/maintenance/generate schema cache.php”。
或者,如果您想通过浏览器执行此操作,请将“include/htmlpurifier/maintenance/”中的.htaccess文件重命名为其他文件一段时间,然后在
<?php
标记后的第一行的“generate schema cache.php”中添加这一行;php_set_env("PHP_IS_CLI",true);
然后从浏览器运行此文件。在你看到“保存模式..完成了!”,重新命名.htaccess文件。
然后在脚本中,使用“autoformat.displayRemoteLinkUri”作为配置,瞧!
请注意,我在这里提供的第一个文件中的is_remote()函数可能不太好,而且我找不到检查链接是远程链接还是本地链接的脚本,因此如果需要,可以稍后对其进行更改。
关于php - 配置HTMLPurifier将外部链接显示为纯文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9765982/