感謝愛德華的回答,我得到了它的工作。
試試這個:
在你相當於在這裏:
/htmlpurifier-4_4_0/library/HTMLPurifier/URIScheme/
添加一個名爲文件:callto.php
......這些內容:
<?php
// replicated this class/file from '../htmlpurifier-4_4_0/library/HTMLPurifier/URIScheme/mailto.php'
// VERY RELAXED! Shouldn't cause problems, ... but be careful!
/**
* Validates 'callto:' phone number in URI to included only alphanumeric, hyphens, underscore, and optional leading "+"
*/
class HTMLPurifier_URIScheme_callto extends HTMLPurifier_URIScheme {
public $browsable = false;
public $may_omit_host = true;
public function doValidate(&$uri, $config, $context) {
$uri->userinfo = null;
$uri->host = null;
$uri->port = null;
/* notes:
where is the actual phone # parked? Answer in $uri->path. See here:
echo '<pre style="color:pink;">';
var_dump($uri);
echo '</pre>';
object(HTMLPurifier_URI)#490 (7) {
["scheme"]=>
string(6) "callto"
["userinfo"]=>
NULL
["host"]=>
NULL
["port"]=>
NULL
["path"]=>
string(15) "+1-800-555-1212"
["query"]=>
NULL
["fragment"]=>
NULL
}
*/
// are the characters in the submitted <a> href's (URI) value (callto:) from amongst a legal/allowed set?
// my legal phone # chars: alphanumeric, underscore, hyphen, optional "+" for the first character. That's it. But you can allow whatever you want. Just change this:
$validCalltoPhoneNumberPattern = '/^\+?[a-zA-Z0-9_-]+$/i'; // <---whatever pattern you want to force phone numbers to match
$proposedPhoneNumber = $uri->path;
if (preg_match($validCalltoPhoneNumberPattern, $proposedPhoneNumber) !== 1) {
// submitted phone # inside the href attribute value looks bad; reject the phone number, and let HTMLpurifier remove the whole href attribute on the submitted <a> tag.
return FALSE;
} else {
// submitted phone # inside the href attribute value looks OK; accept the phone number; HTMLpurifier should NOT strip the href attribute on the submitted <a> tag.
return TRUE;
}
}
}
...和不要忘記更新您的HTMLpurifier配置,從默認情況下,包括這樣的內容:
$config->set('URI.AllowedSchemes', array ('http' => true, 'https' => true, 'mailto' => true, 'ftp' => true, 'nntp' => true, 'news' => true, 'callto' => true,));
看起來很合理。 –
與其編輯庫內容,我該如何動態添加自己的URIScheme類?我正在嘗試這樣的事情:'$ urireg = $ config-> getDefinition('URISchemeRegistry'); $ urireg-> register(new MyApp_HTMLPurifier_URIScheme_callto,$ config);' – Synchro
我想我找到了它:'HTMLPurifier_URISchemeRegistry :: instance() - > register(new MyApp_HTMLPurifier_URIScheme_callto,$ config);' – Synchro