"a" 标签内的块元素 (htmlpurifier)
Block elements inside "a" tag (htmlpurifier)
如何防止 HTMLPURIFIER 破坏此代码:
<a target="_blank" href="http://www.example" class="link_normal opacity">
<blockquote url="http://www.example" class="big">
<div class="center">
<div class="table_cell"><img src="/images/imagenes_urls/4241.jpg" class="img_url"></div>
</div>
<p style="color:#3b5998" class="b">Desde los 80 hasta 2015, así ha sido la impresionante evolución de los móviles</p>
<p>¿Cómo olvidarse de aquellos enormes objetos a los que llamábamos teléfonos móviles? Muchos de vosotros los recordar...</p>
<span class="dominio">andro4all.com</span>
</blockquote></a>
我用的时候变成这样:
<blockquote class="big">
<a class="link_normal opacity" href="http://www.example"></a>
<div class="center">
<a class="link_normal opacity" href="http://www.example"></a>
<div class="table_cell">
<a class="link_normal opacity" href="http://www.example">
<img alt="4241.jpg" class="img_url" src="/images/imagenes_urls/4241.jpg">
</a>
</div>
<a class="link_normal opacity" href="http://www.example"></a>
</div>
<a class="link_normal opacity" href="http://www.example"></a>
<p class="b" style="color:#3b5998;">
<a class="link_normal opacity" href="http://www.example">Desde los 80 hasta 2015, asà ha sido la impresionante evolución de los móviles</a>
</p></blockquote>
在 HTML4 中用内联标签包装分组标签 blockquote 是无效的。
你也可以在这里找到关于这个标签的好信息http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-blockquote-element
您可以使用一些技巧,例如将 JavaScript 添加到您的主标记中,例如:
onclick="document.location='http://www.example'"
你可以为光标添加指针样式,使其看起来像一个普通的 link:
style="cursor:pointer"
那将是这样的:
<blockquote url="http://www.example" class="big" onclick="document.location='http://www.example'" style="cursor:pointer">
<div class="center">
<div class="table_cell"><img src="/images/imagenes_urls/4241.jpg" class="img_url"></div>
</div>
<p style="color:#3b5998" class="b">Desde los 80 hasta 2015, así ha sido la impresionante evolución de los móviles</p>
<p>¿Cómo olvidarse de aquellos enormes objetos a los que llamábamos teléfonos móviles? Muchos de vosotros los recordar...</p>
<span class="dominio">andro4all.com</span>
</blockquote>
经过实验,我发现了这个特定问题的巧妙答案。您可以自定义 HTMLPurifier 的行为,如 http://htmlpurifier.org/docs/enduser-customize.html.
中所述
具体来说,您可以通过再次定义元素来覆盖 'a' 锚元素的默认行为,如下所示:
include_once('HTMLPurifier.auto.php');
$config = HTMLPurifier_Config::createDefault();
$def = $config->getHTMLDefinition(true);
// here is the magic method that overwrites the default anchor definition
$def->addElement(
'a', // element name
'Inline', // the type of element: 'Block','Inline', or false, if it's a special case
'Flow', // what type of child elements are permitted: 'Empty', 'Inline', or 'Flow', which includes block elements like div
'Common' // permitted attributes
);
$purifier = new HTMLPurifier($config);
// $dirty_html is the html you want cleaned
echo $purifier->purify($dirty_html);
现在您可以在锚标记内包含块元素,正如 HTML5 规范 (http://dev.w3.org/html5/markup/a.html) 所允许的那样。
为了获得更强大的 HTML5 解决方案,Christoffer Bubach 提供了详细的 HTMLPurifier 配置以允许更新的 HTML5 标签,尽管它没有重新定义定位标签以允许其中的块元素。查看他对这个 SO 问题的回答:HTML filter that is HTML5 compliant
如何防止 HTMLPURIFIER 破坏此代码:
<a target="_blank" href="http://www.example" class="link_normal opacity">
<blockquote url="http://www.example" class="big">
<div class="center">
<div class="table_cell"><img src="/images/imagenes_urls/4241.jpg" class="img_url"></div>
</div>
<p style="color:#3b5998" class="b">Desde los 80 hasta 2015, así ha sido la impresionante evolución de los móviles</p>
<p>¿Cómo olvidarse de aquellos enormes objetos a los que llamábamos teléfonos móviles? Muchos de vosotros los recordar...</p>
<span class="dominio">andro4all.com</span>
</blockquote></a>
我用的时候变成这样:
<blockquote class="big">
<a class="link_normal opacity" href="http://www.example"></a>
<div class="center">
<a class="link_normal opacity" href="http://www.example"></a>
<div class="table_cell">
<a class="link_normal opacity" href="http://www.example">
<img alt="4241.jpg" class="img_url" src="/images/imagenes_urls/4241.jpg">
</a>
</div>
<a class="link_normal opacity" href="http://www.example"></a>
</div>
<a class="link_normal opacity" href="http://www.example"></a>
<p class="b" style="color:#3b5998;">
<a class="link_normal opacity" href="http://www.example">Desde los 80 hasta 2015, asà ha sido la impresionante evolución de los móviles</a>
</p></blockquote>
在 HTML4 中用内联标签包装分组标签 blockquote 是无效的。
你也可以在这里找到关于这个标签的好信息http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-blockquote-element
您可以使用一些技巧,例如将 JavaScript 添加到您的主标记中,例如:
onclick="document.location='http://www.example'"
你可以为光标添加指针样式,使其看起来像一个普通的 link:
style="cursor:pointer"
那将是这样的:
<blockquote url="http://www.example" class="big" onclick="document.location='http://www.example'" style="cursor:pointer">
<div class="center">
<div class="table_cell"><img src="/images/imagenes_urls/4241.jpg" class="img_url"></div>
</div>
<p style="color:#3b5998" class="b">Desde los 80 hasta 2015, así ha sido la impresionante evolución de los móviles</p>
<p>¿Cómo olvidarse de aquellos enormes objetos a los que llamábamos teléfonos móviles? Muchos de vosotros los recordar...</p>
<span class="dominio">andro4all.com</span>
</blockquote>
经过实验,我发现了这个特定问题的巧妙答案。您可以自定义 HTMLPurifier 的行为,如 http://htmlpurifier.org/docs/enduser-customize.html.
中所述具体来说,您可以通过再次定义元素来覆盖 'a' 锚元素的默认行为,如下所示:
include_once('HTMLPurifier.auto.php');
$config = HTMLPurifier_Config::createDefault();
$def = $config->getHTMLDefinition(true);
// here is the magic method that overwrites the default anchor definition
$def->addElement(
'a', // element name
'Inline', // the type of element: 'Block','Inline', or false, if it's a special case
'Flow', // what type of child elements are permitted: 'Empty', 'Inline', or 'Flow', which includes block elements like div
'Common' // permitted attributes
);
$purifier = new HTMLPurifier($config);
// $dirty_html is the html you want cleaned
echo $purifier->purify($dirty_html);
现在您可以在锚标记内包含块元素,正如 HTML5 规范 (http://dev.w3.org/html5/markup/a.html) 所允许的那样。
为了获得更强大的 HTML5 解决方案,Christoffer Bubach 提供了详细的 HTMLPurifier 配置以允许更新的 HTML5 标签,尽管它没有重新定义定位标签以允许其中的块元素。查看他对这个 SO 问题的回答:HTML filter that is HTML5 compliant