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

时间:2015-11-07 07:41:48

标签: php html pdf-generation html2pdf

我有一个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

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

1 个答案:

答案 0 :(得分:1)

解析HTML以确保它是有效的并不是任何语言的简单任务 - 我在这里提请你注意stackoverflow上的两篇特别文章,即"How do you parse and process HTML/XML in PHP?""RegEx match open tags except XHTML self-contained tags"

那就是说,我发现你可以使用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 */
        }
?>