Link 内文 HTML 净化
Link inside text in HTML purify
我有一个link里面的文字:
$va="Some text http://www.whosebug.com?var=1&var2=2 more text"
当用这个净化时:
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.MakeAbsolute', false);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('URI.AllowedSchemes',
array (
'http' => true,
'https' => true,
'mailto' => true
));
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('a', 'data-width', 'Text');
$def->addAttribute('a', 'data-height', 'Text');
$def->addAttribute('a', 'id', 'Text');
$def->addAttribute('a', 'name', 'Text');
$purifier = new HTMLPurifier($config);
$va = $purifier->purify($va);
净化替换字符 & 的 link for < 我怎样才能防止这种情况?
我没有使用过这个库,但我很好奇你为 link ($def) 做了一个定义并且从未在 purifier 上设置它。
在我看来,将“<”字符列入白名单并不是正确的解决方案。如果配置正确,应该由净化器处理。
当我运行你的代码时,我得到了想要的结果:
<?php
ini_set('display_errors', TRUE);
error_reporting(E_ALL);
include_once 'library/HTMLPurifier.auto.php';
$raw = 'Some text http://www.whosebug.com?var=1&var2=2 more text';
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.MakeAbsolute', false);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('URI.AllowedSchemes',
array (
'http' => true,
'https' => true,
'mailto' => true
));
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('a', 'data-width', 'Text');
$def->addAttribute('a', 'data-height', 'Text');
$def->addAttribute('a', 'id', 'Text');
$def->addAttribute('a', 'name', 'Text');
$purifier = new HTMLPurifier($config);
echo $purifier->purify($raw);
我明白了
Some text http://www.whosebug.com?var=1&var2=2 more text
请注意,符号已正确转义。这一定是您代码中其他地方的错误。
我有一个link里面的文字:
$va="Some text http://www.whosebug.com?var=1&var2=2 more text"
当用这个净化时:
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.MakeAbsolute', false);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('URI.AllowedSchemes',
array (
'http' => true,
'https' => true,
'mailto' => true
));
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('a', 'data-width', 'Text');
$def->addAttribute('a', 'data-height', 'Text');
$def->addAttribute('a', 'id', 'Text');
$def->addAttribute('a', 'name', 'Text');
$purifier = new HTMLPurifier($config);
$va = $purifier->purify($va);
净化替换字符 & 的 link for < 我怎样才能防止这种情况?
我没有使用过这个库,但我很好奇你为 link ($def) 做了一个定义并且从未在 purifier 上设置它。
在我看来,将“<”字符列入白名单并不是正确的解决方案。如果配置正确,应该由净化器处理。
当我运行你的代码时,我得到了想要的结果:
<?php
ini_set('display_errors', TRUE);
error_reporting(E_ALL);
include_once 'library/HTMLPurifier.auto.php';
$raw = 'Some text http://www.whosebug.com?var=1&var2=2 more text';
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.MakeAbsolute', false);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('URI.AllowedSchemes',
array (
'http' => true,
'https' => true,
'mailto' => true
));
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('a', 'data-width', 'Text');
$def->addAttribute('a', 'data-height', 'Text');
$def->addAttribute('a', 'id', 'Text');
$def->addAttribute('a', 'name', 'Text');
$purifier = new HTMLPurifier($config);
echo $purifier->purify($raw);
我明白了
Some text http://www.whosebug.com?var=1&var2=2 more text
请注意,符号已正确转义。这一定是您代码中其他地方的错误。