簡體   English   中英

在腳本標記php中轉義單引號

[英]Escape single quotes inside script tag php

我有以下內容:

<?php echo '<script type="text/javascript">(function(d) {var url="http://myurl.com"; var iframe = d.createElement("iframe");(iframe.frameElement || iframe).style.cssText = "width: 0; height: 0;border: 0;"; iframe.src = "javascript:false"; d.body.appendChild(iframe);var doc = iframe.contentWindow.document; doc.open().write(\'<body onload="window.location.href=\'+url+\'">\'); doc.close();})(document); </script>'; ?>

它會在頁面上創建iframe並將iframe的body標簽的onload屬性設置為url變量的值。

我的問題是我希望url的值被單引號括起來,例如:

<body onload="window.location.href='http://myurl.com'"></body> (**Noticed the single quotes around the url?**)

但是我得到了:

<body onload="window.location.href=http://myurl.com"></body> (**without single quotes around the url**)

有人可以幫忙嗎?

提前致謝

我個人會使用HEREDOC。 它們不是很知名,但是它們是處理弦樂的非常有效的方法

<?php
        echo <<<CODE 
<script type="text/javascript">(function(d) {var url="http://myurl.com"; var iframe = d.createElement("iframe");(iframe.frameElement || iframe).style.cssText = "width: 0; height: 0;border: 0;"; iframe.src = "javascript:false"; d.body.appendChild(iframe);var doc = iframe.contentWindow.document; doc.open().write('<body onload="window.location.href=\''+url+'\'">'); doc.close();})(document); </script>

CODE; //<-- note nothing can come before or after this no spaces or even this comment.

正如我在代碼中輸入的那樣,結尾標識符 (在本例中為SCRIPT之前/之后什么也不會出現,即使是單個空格也不起作用。 除了; 您實際上可以在將其放入數組時將其忽略,但這是另一回事了。

標識符可以是任何東西,但是不應在文本中出現,這是一個很好的一般規則。

這樣做的好處是我們不使用引號或單引號將其標記為字符串,因此它使我們可以同時使用兩者。 無需在正常使用范圍內對此進行轉義(不需要PHP的用途)

對於變量插值(將變量替換為其值),HEREDOC(上方)的工作方式類似於"

NOWDOC版本的作用類似於' ,它不替換變量。 就是這樣

 <?php
 <<<'TAG'
 SOME CONTENT
 TAG;

注意<<<'TAG'而不是<<<TAG 對於結束符“ tag”,我使用了與上述相同的規則。 這非常非常非常重要,這就是為什么我大膽地提到它3次。

UPDATE

如注釋中所述,如果您想要在URL周圍添加多余的' ,則必須將其轉義,但這是出於Java腳本目的,而不是PHP。 總體而言,它仍然使代碼更易於處理。

.write('<body onload="window.location.href=\''+url+'\'">');

因為沒有方法可以不必針對Javascript進行轉義,但是您不必擔心由於PHP而導致的其他轉義。 我很確定沒有HEREDOC,您需要為其添加2個額外的\\ ,例如href=\\\\\\''+url+'\\\\\\' ,這很丑陋,或者將雙引號更改為'我真的不喜歡'不喜歡帶有單引號的標簽(它是我的寵兒) <script type='text/javascript' ...這對我來說很丑。

嘗試這個:

<?php echo  "<script type='text/javascript'>
(function(d){
    var url='http://myurl.com'; 
    var iframe = d.createElement('iframe');
    (iframe.frameElement || iframe).style.cssText = 'width: 0; height: 0;border: 0;'; 
    iframe.src = 'javascript:false'; 
    d.body.appendChild(iframe);
    var doc = iframe.contentWindow.document; 
    doc.open().write('<body onload=\"window.location.href=\''+url+'\'\">'); 
    doc.close();
})(document); 
</script>";
 ?>

主要錯誤在於您對單引號進行了轉義。

因為您試圖獲取href值,所以需要先轉義和連接,如果使用雙引號來管理PHP中的字符串,則更容易。 這樣,可以使用\\“加載onload函數,並且要獲取url值,只需在主字符串中執行\\'。

同樣不要擔心,如果將Javascript分成更多行,這樣做會更容易識別錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM