确定字符串是有效的HTML元素

时间:2018-09-23 23:49:01

标签: php html

我很难获得此约束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="&quot;"></a>:应该通过但失败。

0 个答案:

没有答案