我有一个带有后期操作的grails控制器。
现在,当php和curl尝试发布到grails控制器时,我会获得?
等字符的占位符,如åäö
等。
如果我在同一帖子中创建一个小的html表单,那么grails控制器会收到åäö
而不是?
等参数。
下面的差异是什么?如何让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>
答案 0 :(得分:6)
"UTF-8"
不是CURLOPT_ENCODING
的有效值。您只能identity
,deflate
或gzip
。您需要在Content-Type
标题中设置它:
curl_setopt($x, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=UTF-8'));
答案 1 :(得分:0)
将urlencode与curl_setopt一起使用
curl_setopt($x, CURLOPT_POSTFIELDS, 'Foo=' . urlencode($value));
确保$value
确实在utf-8中,即如果它是手动编码的字符串文字,请确保php源代码文件位于utf-8中。