Php Curl post给出了一些奇怪的字符,比如åäö;
我在grails中有一个带有post操作的控制器。 现在,当php和curl试图发布到grails控件时,我得到了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
?
等字符的占位符。
如果我在同一篇文章中创建一个小的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否。这意味着服务器需要该格式的数据。这并不意味着你发送的是正确编码的数据。嗨,谢谢你的回答。你帮我省去了这个麻烦