Хорошо, мне удалось добавить пользовательский инжектор в 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 <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.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 () внутри первого файла, который я здесь дал, может быть не очень хорошей, и я не смог найти скрипт, который проверяет, является ли ссылка удаленной или локальной, поэтому выможет изменить его позже, если вам нужно.