2

我正在使用以下代码从 html dom 字符串中删除 javascript 并将它们放入数组中以备后用。

有什么可以替代的好用的。

我的问题:我在文件中遇到了 unicode 的问题。解析带有 unicode 的文件时,会产生以下错误:

警告:DOMDocument::saveHTML() [domdocument.savehtml]:由于转换错误,输出转换失败,字节 0x97 0xC3 0xA0 0xC2 in

我的代码:

function loadJSCodeToLast( $strDOM ){
    //Find all the <script></script> code and add to $objApp
    global $objApp;
    $objDOM = new DOMDocument();
    //$x = new DOMImplementation();
    //$doc = $x->createDocument(NULL,"rootElementName");

    //$strDOM = '<kool>'.$strDOM.'</kool>';
    $objDOM->preserveWhiteSpace = false;
    //$objDOM->formatOutput = true; 
    @$objDOM->loadHtml( $strDOM );
    $xpath = new DOMXPath($objDOM);

    $objScripts = $xpath->query('//script');
    $totCount = $objScripts->length;
    if ($totCount > 0) {
         //document contains script tags
        foreach($objScripts as $entries){
            $strSrc = $entries->getAttribute('src');
            if( $strSrc !== ''){
                $objApp->AddJSFile( $strSrc );
            }else{
                $objApp->AddJSScript( $entries->nodeValue );                    
            }
            $entries->parentNode->removeChild( $entries );
        }
    }
    //return $objDOM->saveHTML();
    //echo $GLOBALS['strTemplateDirAbs'];
    return preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $objDOM->saveHTML()));
}
4

1 回答 1

1

utf8_encode()在加载之前尝试转换你的字符串。

$txt = utf8_encode($txt);

var_dump(loadJSCodeToLast($txt));

XML 解析器将 XML 文档的文本转换为 UTF-8,即使您已经设置了 XML 的字符编码,例如作为 DOMDocument 构造函数的第二个参数。使用 load() 命令解析 XML 后,其所有文本都已转换为 UTF-8。

如果您将带有特殊字符(例如元音变音)的文本节点附加到您的 XML 文档,那么您应该在将文本附加到文档之前使用 utf8_encode() 将您的文本转换为 UTF-8。否则,您将在 save() 处收到类似“由于转换错误导致输出转换失败”的错误消息

来自DOMDocument::save 文档评论

于 2012-08-09T05:46:38.980 回答