2010-01-26 75 views
0

我將ABSPATH值從wordpress主題選項頁面傳遞到無法訪問ABSPATH的外部頁面。問題是,一旦在外部文件中接收到值,斜槓就會被刪除。我怎樣才能發送價值並保持完整的斜槓?Wordpress stripslashes問題

我通過像這樣一個JavaScript window.open URL參數傳遞值ABSPATH ...

<input type="button" id="templateUpload" value="Add New Template" onclick="window.open('../wp-content/themes/mytheme/myuploader.php?abspath=<?php echo ABSPATH ?>','popup','width=330,height=230,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no'); return false" /> 

上述執行wordpress主題選項頁的查看源代碼讀取...

ABSPATH = C:\ Xampplite文件\ htdocs中\ WordPress的/

這就是爲什麼我相信我有一個問題

回答

4

這是缺乏JavaScript字符串字面轉義日在絆倒你:\x\h是字符串中的逃逸,所以你需要\\得到一個真正的反斜槓。

但這並非全部。

<input ... onclick="window.open('.../myuploader.php?abspath=<?php echo ABSPATH ?>',... /> 

在這裏,我們輸出值分爲:

  1. URL參數,內部
  2. 一個JavaScript字符串文字,裏面
  3. HTML屬性

這意味着您需要三級轉義:

$uri= '../wp-content/themes/mytheme/myuploader.php?abspath='.urlencode(ABSPATH); 
$jsuri= json_encode($uri); 
$htmljsuri= htmlspecialchars($jsuri); 

<input ... onclick="window.open(<?php echo $htmljsuri; ?>, 'popup', 'features...')" /> 

您可以通過使用json_encode的HEX_選項,以確保已經逃出的方式,在PHP 5.3+ HTML特殊字符減少:

$uri= '../wp-content/themes/mytheme/myuploader.php?abspath='.urlencode(ABSPATH); 
$jsuri= json_encode($uri, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP); 

<input ... onclick="window.open(<?php echo $jsuri; ?>, 'popup', 'features...')" /> 

然而,任何涉及逃逸等多層次這是令人困惑的,一般應予以避免。踢JavaScript和變量進行標記,而不是,那麼你必須逃離擔心一次只有一個級別:

<input type="button" id="templateUpload" value="Add New Template" /> 
<script type="text/javascript"> 
    var ABSPATH= <?php echo json_encode(ABSPATH, JSON_HEX_TAG|JSON_HEX_AMP); ?>; 

    document.getElementById('templateUpload').onclick= function() { 
     var uri= '../wp-content/themes/mytheme/myuploader.php?abspath='+encodeURIComponent(ABSPATH); 
     window.open(uri, 'popup', 'width=330, height=230'); 
    }; 
</script> 

我省略了return false,因爲不需要爲button它,它沒有預防措施。我也刪除了關於刪除瀏覽器Chrome瀏覽器的東西,只是因爲發現它非常令人厭惡。 ;-)

+0

哇巴賓斯,感謝您爲迴應所做的工作。對此,我真的非常感激! – 2010-01-27 02:33:13