Wordpress striplashes问题

时间:2010-01-26 23:13:53

标签: wordpress

我将ABPATH值从wordpress主题选项页面传递到无法访问ABSPATH的外部页面。问题是,一旦在外部文件中收到值,就会删除斜杠。如何发送值并保持斜线完整?

我通过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 /

这就是为什么我认为我遇到了问题

1 个答案:

答案 0 :(得分:4)

缺少JavaScript字符串文字转义会让你失望:\x\h是字符串中的转义符,因此您需要\\才能获得真正的反斜杠。

但这不是全部。

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

在这里输出一个值:

  1. 一个URL参数,在
  2. JavaScript字符串文字,在
  3. HTML属性
  4. 这意味着您需要三个级别的转义:

    $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_选项来减少这种情况,以确保HTML特殊字符已经被转义,在PHP 5.3 +中:

    $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不需要{{1}},它没有要阻止的默认操作。我还删除了有关删除浏览器chrome的内容,因为它发现它非常令人反感。 ; - )