如何获取 php 上的 XML 字符串并将其传递给 mysql 中的 java 脚本

How to get and pass a XML string on php to java script from mysql

所以我得到了这个代码:

                  <input type='button' value='clickme' onclick='download(\"" . $rowtable['Protocolo'] . ".xml\",\"" . $rowtable['XML']. "\");'/></input>
                  <script>
                  function download(filename, text) {
                    var pom = document.createElement('a');
                    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
                    pom.setAttribute('download', filename);
                
                    if (document.createEvent) {
                        var event = document.createEvent('MouseEvents');
                        event.initEvent('click', true, true);
                        pom.dispatchEvent(event);
                    }
                    else {
                        pom.click();
                    }
                }
                  </script>

它从我的数据库中得到 2 个结果,一个是字符串(Protocolo),一个是文本(XML)。 但问题是我的 TEXT(XML) 数据看起来像这样:

<?xml version="1.0" encoding="UTF-8"?><enviNFe versao="4.00" xmlns="asdasdasdasdasd"><idLote>1</idLote><indSinc>1</indSinc><NFe xmlns="asdsdasadsad">

如您所见,它上面有很多 "。它是一种错误,代码。 所以我的问题是,如何将所有这些 $rowtable['XML'] 转换为正确的字符串。所以我可以将它传递给 JS,以便我可以下载它。

如果您有更好的方法从我的数据库下载此 XML 数据,也欢迎您。

您可以将 php 中的 xml 编码为 urlencode,并直接在 javascript.

中使用它的值
<input type='button' value='clickme' onclick='download(\"" . $rowtable['Protocolo'] . ".xml\",\"" . urlencode($rowtable['XML']). "\");'/></input>
<script>
function download(filename, text) {
    var pom = document.createElement('a');
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + text);
    pom.setAttribute('download', filename);

    if (document.createEvent) {
        var event = document.createEvent('MouseEvents');
        event.initEvent('click', true, true);
        pom.dispatchEvent(event);
    }
    else {
        pom.click();
    }
}
</script>

您在按钮 input 属性中缺少 Javascript 和 HTML 的转义。使用 urlencode()base64_encode()(在 PHP 中)会对特殊字符进行编码,这样它们就不会破坏 JS 或 HTML 代码。

但是,如果您使用 a 元素,则无需 JavaScript。

<html>
  <body>
  <?php
    $data = '<foo>Example String</foo>';
    $fileName = 'demo.xml';
  ?>
    <a
      class="DownloadButton"
      href="data:text/plain;charset=utf8,<?=urlencode($data)?>"
      download="<?=htmlspecialchars($fileName)?>">Download</a>
  </body>
</html>

数据被编码并放入Data URL