Настройка HTMLPurifier для отображения внешних ссылок в виде обычного текста

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

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

Related of "Настройка HTMLPurifier для отображения внешних ссылок в виде обычного текста"

Хорошо, мне удалось добавить пользовательский инжектор в 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; } } } } ?> с <?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 \ library \ 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.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. Затем запустите «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 » в качестве config и voila!

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

Я считаю, что это тот, который вы ищете

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

Есть опция URI.DisableExternal и AutoFormat.Linkify. Установите их как ИСТИНА, так и посмотрите, что произойдет.

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