如何获取 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。
所以我得到了这个代码:
<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。