2012-03-19 8 views
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

[OK]を、私は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'; 

\ htmlpurifier \ library \ HTMLPurifier.includes.php

その後、

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

には、下の行

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

を追加\ htmlpurifierは、ライブラリ\ \ HTMLPurifier.safe-含まれています。これらの編集後のphp

、あなたのファイルは、ローカル、実行cmd.exeのであり、あなたのPHPのディレクトリに移動します。次に、php.exeから "include/HTMLPurifier/maintenance/generate-schema-cache.php"を実行します。

ブラウザでこれを行う場合は、「include/HTMLPurifier/maintenance /」内の.htaccessファイルの名前をしばらく変更してから、この行を「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)。私は「スキーを保存しています...完了しました」というメッセージを受け取りました。 –

+0

他の変更はありませんでした。もう一度見てみましょう。 –

+0

txtファイルもありましたが、忘れてしまいました。私はコードを更新しました。テキストファイルを追加し、スキーマを再構築します。 –

3

私は、これはあなたがURI.DisableExternalとAutoFormat.Linkifyという名前のオプションがあります

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

+0

URI.DisableExternalは外部リソースを無効にします。内部リンクと画像を保持しながら、テキストとして外部ハイパーリンクを表示する必要があります。ありがとう –

1

を探している1であると考えています。それらを両方とも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

それは動作しませんでした。私の新しいアップデートを見てください。おかげで –

関連する問題