Entonces obtuve este código:
<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>
Obtiene 2 resultados de mi base de datos que es una cadena (protocolo) y un TEXTO (XML). Pero la cuestión es que mis datos de TEXTO (XML) se ven así:
<?xml version="1.0" encoding="UTF-8"?><enviNFe versao="4.00" xmlns="asdasdasdasdasd"><idLote>1</idLote><indSinc>1</indSinc><NFe xmlns="asdsdasadsad">
Como puede ver, tiene muchos ". Y tiene errores, el código. Entonces mi pregunta es, ¿cómo puedo transformar todo este $rowtable['XML'] en una cadena adecuada? Entonces puedo pasarlo a el JS para poder descargarlo.
Si tiene alguna forma mejor de descargar estos datos XML de mi base de datos, también es bienvenido.
Puede codificar el xml en php con urlencode
y usar su valor directamente en 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>
Te estás perdiendo el escape para Javascript y HTML en los atributos de input
del botón. El uso urlencode()
o base64_encode()
(en PHP) codificaría los caracteres especiales para que no puedan romper el código JS o HTML.
Sin embargo, si usa a
elemento a, puede hacerlo sin 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>
Los datos se codifican y se colocan en una URL de datos .