Настройка HTMLPurifier для отображения внешних ссылок в виде простого текста - PullRequest
3 голосов
/ 19 марта 2012

Я пытаюсь настроить 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/)

Обновление: я хочу сохранитьвнешние ссылки на изображения без изменений.Мне нужно только конвертировать гиперссылки в простой текст.

Ответы [ 3 ]

3 голосов
/ 21 марта 2012

Я верю, что это то, что вы ищете

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

1 голос
/ 21 марта 2012

Существует опция с именами 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 голосов
/ 21 марта 2012

Хорошо, мне удалось добавить пользовательский инжектор в HTMLPurifier, вот он:

Сначала создайте « DisplayRemoteLinkURI.php» в « include \ htmlpurifier \ library».\ HTMLPurifier \ Injector"и напишите в нем

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

?>

, а затем создайте другой файл с именем" AutoFormat.DisplayRemoteLinkURI.txt"в" include \ htmlpurifier \ "библиотеку \ HTMLPurifier \ ConfigSchema \ schema"и добавьте следующее:

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';

в include \ htmlpurifier \ library \ HTMLPurifier.include.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.Затем запустите «include / HTMLPurifier / maintenance / generate-schema-cache.php» из php.exe.

Или, если вы хотите сделать это через браузер, переименуйте ваш файл .htaccess внутри «include / HTMLPurifier / maintenance/ "к чему-то другому на некоторое время, затем добавьте эту строку в" generate-schema-cache.php "в первой строке после тега <?php;

php_set_env("PHP_IS_CLI",true);

и затем запустите этот файл из браузера,После того, как вы видите «Сохранение схемы ... готово!», Переименуйте ваш .htaccess файл обратно.

Затем в вашем скрипте используйте « AutoFormat.DisplayRemoteLinkURI » в качестве конфигурациии вуаля!

Обратите внимание, что функция is_remote () внутри первого файла, который я здесь дал, может быть не очень хорошей, и я не смог найти скрипт, который проверяет, является ли ссылка удаленной или локальной, поэтому выможет изменить его позже, если вам нужно.

...