PHP - 发布数据在'&'时结束在数据中

时间:2010-04-14 06:11:30

标签: php http-post

我在后端使用jquery / ajax和PHP发布数据。问题在于,当我输入类似'Jack& amp;吉尔上山时“我才接到'杰克'到达后端。

我在发送数据之前在前端抛出了一个错误,警告'杰克&吉尔上山了。

当我将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 个答案:

答案 0 :(得分:2)

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

encodeURIComponent用于此

答案 1 :(得分:1)

POST数据通过HTTP标头以与网址中的GET数据类似的形式发送。例如,数据可能看起来像var1=value1&var2=value2&var3=value3。可以想象,如果数据本身包含&符号,那么该格式的效果不会太好。确切地说,问题在于您如何提交数据。

要在帖子数据中使用&符号(或在网址中使用&amp;),它们必须是“urlencoded”,这意味着您必须使用%26作为&字符。所以,问题并不是你的PHP,而是发送数据。它没有正确编码值。

答案 2 :(得分:0)

在javascript端使用encode()或escape()

答案 3 :(得分:0)

在Javascript结尾,您应该使用escape()

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