Kohana 3.2。 - 将UTF-8字符发布到外部网站

问题描述:

我试图发布UTF-8字符,即德语口音到外部网站。然而,当它到达那里似乎是这样的:Kohana 3.2。 - 将UTF-8字符发布到外部网站

ö 

,而不是这样的:

ö 

如果我的var_dump()与适当的UTF-8头我看到重音的信理所应当。

这里的尝试发布时,我正在使用的代码:

$request = Request::factory($url) 
      ->method(Request::POST) 
      ->post($params) 
      ->headers('Content-Disposition', 'form-data; name="postdata"') 
      ->headers('Content-Type', 'text/plain; charset=UTF-8') 
      ->headers('Content-Transfer-Encoding', '8bit'); 
$response = $request->execute(); 
基于莅临指导

http://kohanaframework.org/3.2/guide/kohana/requests#external-requests

接收URL是建立在Java的春天。我使用JMeter测试了发布过程。发布UTF-8重音字符时,抓取它们没有问题。上面的PHP示例中的标题使用与测试相同的设置。

由于JMeter测试正常工作,它必须是PHP的问题。

我也可以通过JAVA接收器网站,然后通过PHP/Kohana/HTML将数据库中的带有重音的UTF-8字符拖到网站上,并显示它们没有问题。

进一步信息:

我发现,如果我跑

utf8_encode('ö'); 
// returns ö 

所以我想如果这是在POST发生。

+1

'ö'看起来像是用拉丁文-1字符集显示的UTF-8'ö'的二进制表示。你确定这不是显示问题吗?至少字节会经过,如果你告诉浏览器显示为UTF-8,你应该看到'ö'。但是,如果你使用'utf8_encode'重新编码*,你将不会。 – hakre

+0

这不是显示问题。如果输入表单失败,我可以看到口音很好,输入框填充了失败的数据。它似乎是POST中的一些东西,它会随着接收器获取它的时间而改变,它具有二进制表示。 – diggersworld

+0

你还没有添加关于接收器的任何代码,所以实际上你只是说发送器方面工作正常。但是,接收端在您的问题中未指定。所以实际上不可能说出来。 – hakre

很多玩弄我发现下面的代码工作后:

$data = http_build_query($params); 
$request = Request::factory($url) 
      ->method(Request::POST) 
      ->body($data) 
      ->headers('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');      
$response = $request->execute(); 

的主要区别在这里是:

  • 现在使用的->body($data)代替->post($params)
  • Content-Type是设置为application/x-www-form-urlencoded; charset=UTF-8
  • $data变量创建使用http_build_query()对原始$params数组