1

我在后端使用 jquery/ajax 和 PHP 发布数据。问题是,当我输入“Jack & Jill got up the hill”之类的内容时,我只会在到达后端时收到“Jack”。

在发送数据之前,我在前端抛出了一个错误,提示“杰克和吉尔上山了”。

当我放在die(print_r($_POST));索引页面的最顶部时,我只会得到[key] => Jack

我怎么会丢失数据?

我想这可能是我的过滤器;

<?php

function filter( $data ) {
    $data = trim( htmlentities( strip_tags( mb_convert_encoding( $data, 'HTML-ENTITIES', "UTF-8") ) ) ); 
    if ( get_magic_quotes_gpc() ) { 
        $data = stripslashes( $data ); 
    } 
    //$data = mysql_real_escape_string( $data ); 
    return $data;
}

echo "<xmp>" . filter("you & me") . "</xmp>";

?>

但是you & me在我添加die(print_r($_POST));.

谁能想到这是如何以及为什么会发生的?

非常感谢任何帮助。

4

4 回答 4

2

您很可能无法对数据进行 URL 编码。该&字符分隔提交的表单数据中的键值对。

为此使用encodeURIComponent

于 2010-04-14T06:18:36.450 回答
1

POST 数据通过 HTTP 标头以类似于 url 中的 GET 数据的形式发送。例如,数据可能看起来像var1=value1&var2=value2&var3=value3. 正如您可以想象的那样,如果数据本身包含与号,那么在该格式上它不会很好地工作。准确地说,问题在于您如何提交数据。

%26要在帖子数据(或在 url 中)使用与号,它们必须是“urlencoded”,这意味着您必须使用&字符。所以,真正有问题的不是你的 PHP,而是发送数据的任何东西。它没有正确编码值。

于 2010-04-14T06:20:16.277 回答
0

在 javascript 结束时使用 encode() 或 escape()

于 2010-04-14T06:18:06.323 回答
0

在 Javascript 端你应该使用escape().

在 PHP 端,该函数被命名为urlencode().

于 2010-04-14T06:21:43.683 回答