Php Curl post给出了一些奇怪的字符,比如åäö;

Php Curl post给出了一些奇怪的字符,比如åäö;,php,grails,encoding,curl,Php,Grails,Encoding,Curl,我在grails中有一个带有post操作的控制器。 现在,当php和curl试图发布到grails控件时,我得到了?等字符的占位符。 如果我在同一篇文章中创建一个小的html表单,grails contoller将收到参数为而不是?,等等 下面的示例与如何让curl充当html表单示例之间有什么不同 卷曲示例: $x = curl_init("http://localhost/post"); curl_setopt($x, CURLOPT_HTTPHEADER, array('Con

我在grails中有一个带有post操作的控制器。 现在,当php和curl试图发布到grails控件时,我得到了
等字符的占位符。 如果我在同一篇文章中创建一个小的html表单,grails contoller将收到参数为
而不是
,等等

下面的示例与如何让curl充当html表单示例之间有什么不同

卷曲示例:

$x = curl_init("http://localhost/post");      
curl_setopt($x, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));  
curl_setopt($x, CURLOPT_POST, 1);  
curl_setopt($x, CURLOPT_POSTFIELDS, "Foo=ö");  
curl_setopt( $x, CURLOPT_ENCODING, "UTF-8" );   
curl_setopt($x, CURLOPT_RETURNTRANSFER, 1);  
$data = curl_exec($x);   
curl_close($x);
html表单示例:

<html> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head><title></title></head>
<body>
<form name="input" action="http://localhost/post" method="post" enctype="application/x-www-form-urlencoded">
<TEXTAREA NAME="Foo" COLS=10 ROWS=4 type=text>ö</TEXTAREA>
<input class="button" type="submit" value="send"/>
</form>
</body>
</html>

ö
“UTF-8”
不是
CURLOPT\u编码的有效值。您只能使用
identity
deflate
gzip
。您需要在
内容类型
标题中进行设置:

curl_setopt($x, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=UTF-8'));  
  • 将urlencode与curl_setopt一起使用

    curl_setopt($x, CURLOPT_POSTFIELDS, 'Foo=' . urlencode($value));
    
  • 确保
    $value
    确实在utf-8中,也就是说,如果它是手工编码的字符串文字,请确保php源代码文件在utf-8中


  • 嗨,谢谢你的回答。更改HTTP_头以包括您建议的编码不会影响测试结果。当服务器接收到参数时,示例表单和curl示例的行为仍然不同。@Karolina在这种情况下,您可能需要对特殊字符使用
    urlencode
    <代码>curl_setopt($x,CURLOPT_POSTFIELDS,“Foo=”.urlencode(“ö”))嗨,那也没用。简短的问题是,指定的contenttype(x-www-form-urlencoded)不是负责urlencoding吗?@Karolina否。这意味着服务器需要该格式的数据。这并不意味着你发送的是正确编码的数据。嗨,谢谢你的回答。你帮我省去了这个麻烦