Curl post给出了像åäö这样的奇怪角色

时间:2011-05-07 09:48:48

标签: php grails encoding curl

我有一个带有后期操作的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>

2 个答案:

答案 0 :(得分:6)

"UTF-8"不是CURLOPT_ENCODING的有效值。您只能identitydeflategzip。您需要在Content-Type标题中设置它:

curl_setopt($x, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=UTF-8'));  

答案 1 :(得分:0)

  1. 将urlencode与curl_setopt一起使用

    curl_setopt($x, CURLOPT_POSTFIELDS, 'Foo=' . urlencode($value));
    
  2. 确保$value确实在utf-8中,即如果它是手动编码的字符串文字,请确保php源代码文件位于utf-8中。