我很难获得此约束matches
函数来匹配所有HTML元素。
对于任何合法的,正确格式的HTML元素,它必须返回true;对于非合法的,正确格式的HTML元素,它必须返回false。
以下是不起作用的事情:
$dom = new \DOMDocument(); return $dom->loadHTML($value);
$dom = new \DOMDocument(); return $dom->loadHTML($value,LIBXML_HTML_NOIMPLIED);
LIBXML_NOENT
添加到simplexml_load_string()
。LIBXML_HTML_NOIMPLIED
添加到simplexml_load_string()
。这是当前功能:
function matches($value)
{
\libxml_use_internal_errors(true);
if (!\is_string($value) || empty($value)) {
return false;
}
$start = \strpos($value, '<');
$end = \strrpos($value, '>', $start);
$len = \strlen($value);
if ($end !== false) {
$value = \substr($value, $start);
} else {
$value = \substr($value, $start, $len - $start);
}
$value = \html_entity_decode($value);
$value = \str_replace('&', '', $value);
\libxml_clear_errors();
$xml = \simplexml_load_string($value);
return \count(\libxml_get_errors()) === 0;
}
当前版本存在两个已知问题:
<script>&</script>
:应该失败但可以通过。<a b="""></a>
:应该通过但失败。