什么是加载剥离javascript并将其放入数组以供以后使用的替代方法

Posted

技术标签:

【中文标题】什么是加载剥离javascript并将其放入数组以供以后使用的替代方法【英文标题】:What can be alternate way to load strip out javascript and put it in array for later use 【发布时间】:2012-08-06 07:03:38 【问题描述】:

我正在使用以下代码从 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()));

【问题讨论】:

具体是什么问题?此外,如果你有 php 5.3.6 或更高版本,你可以使用$objDOM-&gt;saveHTML($objDOM-&gt;documentElement) 而不是凌乱的剥离。 用更具体的定义更新了问题 【参考方案1】:

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

$txt = utf8_encode($txt);

var_dump(loadJSCodeToLast($txt));

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

如果您在文本节点附加特殊字符(例如元音变音) 因此,您应该在您的 XML 文档中使用 utf8_encode() text 将其转换为 UTF-8,然后再将文本附加到 文档。否则,您将收到类似“输出 由于转换错误,转换失败”在 save()

来自DOMDocument::save documentation comments。

【讨论】:

以上是关于什么是加载剥离javascript并将其放入数组以供以后使用的替代方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Javascript将地理位置坐标存储到数组中?

我正在尝试从 .csv 读取信息并将其放入 C# 中的数组中。谁能告诉我为啥代码不起作用?

使用 Afnetworking 获取 UIImageView 并将其放入数组中

使用 Dart 语言解析嵌套 JSON 数组并将其放入模型类中

异步获取数据并将其放入 UICollectionView 失败 - 集合在数据之前加载并且不更新

JQuery Mobile 会干扰 Javascript 还是格式问题?