【问题标题】:Stop automatic URL decoding in PHP/Drupal在 PHP/Drupal 中停止自动 URL 解码
【发布时间】:2011-03-30 23:07:19
【问题描述】:

我将自定义 XML 数据从 jQuery 发送到 Drupal/PHP,如下所示:

$.ajax({
            type: 'POST',       
            url: this.href,

            success: function(data){ 

                alert('Form is successfully saved');


            },
            error:function(XMLHttpRequest, textStatus,  errorThrown){
                alert("Error");

            },

            data: 'myxml='+ mydata 
        });

我的 XML 标记包含 URL,所以我对它们进行编码,在进行 AJAX 调用之前,数据看起来有点像这样:

mydata="<txtLinkLocation>http%3A%2F%2Fportal.cubewerx.com%2Fcubewerx%2Fcubeserv%2Fcubeserv.cgi%3FCONFIG%3Dhaiti%26SERVICE%3DWFS%26DATASTORE%3DOSM%26request%3DGetCapabilities</txtLinkLocation>";

并且,在 PHP 中,我得到接收到的数据,并将其存储如下:

$receivedXML = $_POST['myxml'];

现在,$receivedXML 的包含如下所示:

<txtLinkLocation>http://portal.cubewerx.com/cubewerx/cubeserv/cubeserv.cgi?CONFIG=haiti&SERVICE=WFS&DATASTORE=OSM&request=GetCapabilities</txtLinkLocation>

我的问题是为什么这个字符串中的 URL 会被自动解码?为什么会这样?我不希望对通过 AJAX 调用发送的数据执行任何自动操作。如何制止这种行为?我觉得我在这里遗漏了一些基本概念......

【问题讨论】:

    标签: php jquery drupal


    【解决方案1】:

    $_POST 数据以与 $_GET 相同的方式发送到服务器。它必须发送 urlencoded 否则它可能会损坏。这意味着默认情况下,PHP 会解码 urlencode,因为它希望数据是 urlencoded。

    【讨论】:

      【解决方案2】:

      PHP 默认解码 $_GET 和 $_REQUEST 数据,请参阅the note in urldecoding on auto-encoding server variables。原来 $_POST 也是。

      解决方案:urlencode() 如果您希望对数据进行编码,请再次@您的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多