检查用户插入的字符串是否为有效的HTML


check user inserted string is valid HTML or not

我有一个textarea供用户使用tinymce插入html。我正在使用html2pdf库来打印PDF中的内容。但是,有时用户会像这样插入无效的html,

<p><span>test</p>

因此,它会导致打印PDF时出错。

所以我想在打印之前检查一下HTML是否有效,

if(valid_html)
   PRINT_PDF
else
   strip_tags(PRINT_PDF); // removing tags from sting

为此,我也从这里尝试了这个解决方案。但在很多情况下不起作用。我需要这个解决方案,允许用户打印pdf。

解析HTML以确保其有效性在任何语言中都不是一项容易的任务-我提请您注意stackerflow上的两篇文章,即"如何在PHP中解析和处理HTML/XML?"answers"RegEx匹配除XHTML自包含标记外的开放标记"

也就是说,我发现您可以使用DOMDocument进行一些基本的解析,但它还远远不够完美——不过,它可能足以满足您的目的。

<?php
        $textarea_contents=$_POST['name_of_textarea'];
        $buffer = urldecode( $textarea_contents );
        $errors = array();
        $status=200;
        $dom=new DOMDocument();
        $dom->validateOnParse = TRUE;
        libxml_use_internal_errors( TRUE );
        $dom->loadHTML( $buffer );
        $results=libxml_get_errors();
        $dom=NULL;
        libxml_clear_errors();
        if( !empty( $results ) && count( $results ) > 0 ){
            /* Errors detected, prevent further processing of your pdf */
            $status=400;
            foreach( $results as $error ){
                $errors[]=array(
                    'message'   =>  $error->message,
                    'code'      =>  $error->code,
                    'line'      =>  $error->line,
                    'level'     =>  $error->level,
                    'column'    =>  $error->column
                );
            }
        } else {
            /* Hopefully the submitted data validated OK - create PDF */
        }
?>