2014-10-14 2 views
0

Я написал скрипт PHP под названием generateemail.php, который принимает входные данные от пользователя, а затем объединяет их вход с шаблоном для составления полной HTML-страницы готовые к отправке клиентам.Невозможно отобразить HTML-код, сгенерированный PHP-скриптом, в новом окне браузера с использованием JQuery

Проблема в том, что я хотел бы, чтобы сценарий открыл отдельное окно браузера, отображающее содержимое, - я могу получить код для перехода в новое окно, но он отображается как код и фактически не обрабатывает его, как показано в Скриншот.

<script> 
 

 
function htmlEntities(str) { 
 
    return String(str).replace('&amp;', '&').replace('&lt;', '<').replace('&gt;', '>').replace('&quot;', '\"'); 
 
} 
 

 
function printClick() { 
 
    var w = window.open(); 
 
    var html = "<?php echo preg_replace("/\r|\n/", "", htmlspecialchars($emailheader)); ?>"; 
 
    var html2 = "<?php echo preg_replace("/\r|\n/", "", htmlspecialchars($emailbody)); ?>"; 
 
    
 
    
 
    
 
    // how do I write the html to the new window with JQuery? 
 

 
    $(w.document.head).html(html).val(); 
 
\t $(w.document.body).html(html2).val(); 
 
} 
 

 
</script>

Скриншот: http://i.stack.imgur.com/cQVyi.png

+0

Удалить VAL(), он используется для полей ввода и значения текстового поля. Попробуй так: $ (w.document.head) .html (html); $ (W.document.body) .html (html2); –

+0

Благодарим вас за ответ, я сейчас пробовал это, но он такой же, как и раньше, - до сих пор доставлял данные, а не отдавал их. – djh123

ответ

0

мне удалось решить эту проблему с помощью Base64

<script> 


var Base64 = { 

    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=", 

    decode: function(input) { 
     var output = ""; 
     var chr1, chr2, chr3; 
     var enc1, enc2, enc3, enc4; 
     var i = 0; 

     input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 

     while (i < input.length) { 

      enc1 = this._keyStr.indexOf(input.charAt(i++)); 
      enc2 = this._keyStr.indexOf(input.charAt(i++)); 
      enc3 = this._keyStr.indexOf(input.charAt(i++)); 
      enc4 = this._keyStr.indexOf(input.charAt(i++)); 

      chr1 = (enc1 << 2) | (enc2 >> 4); 
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
      chr3 = ((enc3 & 3) << 6) | enc4; 

      output = output + String.fromCharCode(chr1); 

      if (enc3 != 64) { 
       output = output + String.fromCharCode(chr2); 
      } 
      if (enc4 != 64) { 
       output = output + String.fromCharCode(chr3); 
      } 

     } 

     output = Base64._utf8_decode(output); 

     return output; 

    }, 

    _utf8_decode: function(utftext) { 
     var string = ""; 
     var i = 0; 
     var c = c1 = c2 = 0; 

     while (i < utftext.length) { 

      c = utftext.charCodeAt(i); 

      if (c < 128) { 
       string += String.fromCharCode(c); 
       i++; 
      } 
      else if ((c > 191) && (c < 224)) { 
       c2 = utftext.charCodeAt(i + 1); 
       string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); 
       i += 2; 
      } 
      else { 
       c2 = utftext.charCodeAt(i + 1); 
       c3 = utftext.charCodeAt(i + 2); 
       string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 
       i += 3; 
      } 

     } 

     return string; 
    } 

} 


function printClick() { 
    var w = window.open(); 
    var html = "<?php echo $emailheader; ?>"; 
    var html2 = "<?php echo $emailbody; ?>"; 


    var decodedString = Base64.decode(html); 
    var decodedString2 = Base64.decode(html2); 


$(w.document.head).html(decodedString); 
$(w.document.body).html(decodedString2); 
} 

</script> 
1

Попробуйте как этот http://jsfiddle.net/ty368zfr/

Вы не можете использовать JQuery, так что используйте Чистый JavaScript

w.document.head.innerHTML = html; 
w.document.body.innerHTML = html2; 
+0

Я пробовал, что то же самое происходит снова. Я пробовал: alert (html), а также alert (htmlEntities (html)) и выяснили, что все еще есть объекты HTML, которые закодированы. Вот скриншот обоих: http://imgur.com/HGxqej4 – djh123

0

proble m - это то, что вы кодируете html с помощью htmlspecialcharacter. там решение будет удалить его

<?php 
$emailheader="<meta charset='utf-8' /><title>Sample header</title>"; 
$emailbody="<p>Some body</p>"; 
?> 

    <script> 
     var w = window.open(); 

     var html = "<?php echo preg_replace("/\r|\n/", "", htmlspecialchars($emailheader)); ?>"; 
     var html2 = "<?php echo preg_replace("/\r|\n/", "", htmlspecialchars($emailbody)); ?>"; 

    console.log(html);//Result : &lt;meta charset='utf-8' /&gt;&lt;title&gt;Sample header&lt;/title&gt; 

     var html = "<?php echo preg_replace("/\r|\n/", "", $emailheader); ?>"; 
     var html2 = "<?php echo preg_replace("/\r|\n/", "", $emailbody); ?>"; 

     console.log(html);//Result : <meta charset='utf-8' /><title>Sample header</title> 

     w.document.head.innerHTML = html; 
     w.document.body.innerHTML = html2; 
    </script> 
+0

Спасибо за предложение, я пробовал, но получаю сообщение об ошибке: Uncaught SyntaxError: Неожиданный идентификатор Я думаю, это потому, что второй набор html/Переменные html2 содержат неэксклюзивные двойные кавычки, как показано на этом скриншоте - http://imgur.com/HH1TZmT – djh123

1

Я думаю, что проблема заключается в concatentation ваших HTML строк. Попробуйте что-то вроде этого:

var html = '<?php echo preg_replace("/\\r|\\n/", "", htmlspecialchars($emailheader)); ?>'; 
var html2 = '<?php echo preg_replace("/\\r|\\n/", "", htmlspecialchars($emailbody)); ?>'; 

Вы должны также удалить вызовы val() функцию. Нет необходимости размещать ваш HTML-код!

$(w.document.head).html(html); 
$(w.document.body).html(html2); 
+0

Спасибо, но проблема все еще присутствует при попытке этого метода – djh123

+0

Можете ли вы опубликовать сгенерированный исходный код? –

Смежные вопросы