php
  • htmlpurifier
  • 2012-03-19 102 views 3 likes 
    3

    我试图将HTMLPurifier配置为仅以纯文本形式显示外部链接。我使用了DisplayLinkURI选项,但它将所有链接显示为纯文本。有没有配置?这里是我的代码:将HTMLPurifier配置为以纯文本的形式显示外部链接

    $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/) 
    

    更新: 我想继续为图像的外部链接不更改。我只需要将超链接转换为纯文本。

    回答

    0

    好吧,我成功地定制注射器添加到HTMLPurifier,那就是:

    首先,在创建 “DisplayRemoteLinkURI.php”包括\ htmlpurifier \库\ HTMLPurifier \注射器“写这在它

    <?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; 
          } 
         } 
        } 
    } 
    
    ?> 
    

    然后创建一个名为另一个文件” AUT oFormat.DisplayRemoteLinkURI.txt “中的”包括\ htmlpurifier \库\ HTMLPurifier \ ConfigSchema \模式“,并补充一点:

    AutoFormat.DisplayRemoteLinkURI 
    TYPE: bool 
    VERSION: 3.2.0 
    DEFAULT: false 
    --DESCRIPTION-- 
    <p> 
        This directive turns on the in-text display of Remote URIs in &lt;a&gt; 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'; 
    

    in include \ htmlpurifier \ library \ HTMLPurifier.includes.php

    然后,添加这一行

    require_once $__dir . '/HTMLPurifier/Injector/DisplayRemoteLinkURI.php'; 
    

    require_once $__dir . '/HTMLPurifier/Injector/DisplayLinkURI.php'; 
    

    包括\ htmlpurifier \库\ HTMLPurifier.safe-包括。php

    经过这些编辑,如果你的文件在本地,运行cmd.exe并进入你的php目录。然后从php.exe运行“include/HTMLPurifier/maintenance/generate-schema-cache.php”。

    或者如果你想通过浏览器做到这一点,重命名你的.htaccess文件内的“include/HTMLPurifier/maintenance /”一段时间,然后将此行添加到“generate-schema-cache.php” <?php标签后的第一行;

    php_set_env("PHP_IS_CLI",true); 
    

    然后从浏览器运行此文件。在看到“保存模式完成!”后,重命名您的.htaccess文件。

    然后在您的脚本中,使用“AutoFormat.DisplayRemoteLinkURI”作为配置,瞧!

    请注意,我在这里给出的第一个文件中的is_remote()函数可能不太好,而且我找不到检查链接是远程还是本地链接的脚本,因此如果您以后可能会更改该链接需要。

    +0

    嗨,谢谢你的努力。我创建了该文件,添加了上述代码,并从命令行运行了php文件。文件库/ HTMLPurifier/ConfigSchema/schema.ser被创建。我添加了AutoFormat.DisplayRemoteLinkURI到我的配置,但我得到了这个错误“警告:无法设置未定义的指令AutoFormat.DisplayRemoteLinkURI值......”。我在schema.ser中搜索了DisplayRemoteLinkURI,但是我没有找到它。我的文件是本地的,我运行(php htmlpurifier/maintenance/generate-schema-cache.php)。我收到了消息“Saving schema ... done!' – 2012-03-21 13:02:00

    +0

    好吧,我没有做任何其他更改。让我再看一次。 – 2012-03-21 13:08:08

    +0

    还有一个我忘记提到的txt文件。我更新了代码。添加文本文件并重建模式。 – 2012-03-21 13:15:09

    3
    +0

    URI.DisableExternal将禁用外部资源。我需要显示外部超链接作为文本,同时保持内部链接和图像。谢谢 – 2012-03-21 08:48:52

    1

    有一个名为URI.DisableExternal和AutoFormat.Linkify的选项之一。将它们都设置为TRUE,看看会发生什么。

    http://htmlpurifier.org/live/configdoc/plain.html#URI.DisableExternal

    http://htmlpurifier.org/live/configdoc/plain.html#AutoFormat.Linkify

    而且AutoFormat.DisplayLinkURI禁用所有的链接。我建议你同时使用上面的而不是AutoFormat.DisplayLinkURI。

    http://htmlpurifier.org/live/configdoc/plain.html#AutoFormat.DisplayLinkURI

    +0

    它没有工作。请参阅我的新更新。谢谢 – 2012-03-21 08:49:36

    相关问题