Загнутый пост дает странные символы, такие как - PullRequest
3 голосов
/ 07 мая 2011

У меня есть контроллер в 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 ]

6 голосов
/ 07 мая 2011

"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'));  
0 голосов
/ 07 мая 2011
  1. Используйте urlencode с curl_setopt

    curl_setopt($x, CURLOPT_POSTFIELDS, 'Foo=' . urlencode($value));
    
  2. Убедитесь, что $value действительно в utf-8, т.е. если это строковый литерал с ручным кодированиемэтот файл с исходным кодом php находится в utf-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...