php 5.6.7 fwrite vs fputs utf-8编码

时间:2015-04-15 16:32:54

标签: php utf-8 fwrite fputs

我有一个xml数据,在网址中以字符串形式发送。

例如url?data = string

这是发送到我无法控制的另一台服务器,他们使用fputs所以我不能简单地改为fwrite。我试图找出如何使fput工作,以便我可以给他们修复。我的测试环境是使用php 5.6.7。

字符串中的字符是á(alt + 0225)。

当我在notepad ++中查看文件时,使用此代码仍然是á。

 $datafile = fopen("datafile.txt", "a");
 foreach (getallheaders() as $name => $value){
      $y = "$name: $value\n";
      fwrite($datafile,$y);
 }
 fclose($datafile);

使用此代码,当使用记事本++查看时,á会变成其他内容。

 $datafile_fputs = fopen("datafile_fputs.txt", "a");
 foreach (getallheaders() as $name => $value) {
      $y = "$name: $value\n"; 
      fputs($datafilefputs,$y);
 }
 fclose($datafile_fputs);

我在stackoverflow上尝试了这个,但字符仍然显示不正确。

 $file = "datafile_fputs";
 $datafile_fputs = fopen($file, "a");
 foreach (getallheaders() as $name => $value) {
      $y = "$name: $value\n"; 
      $file = "\xEF\xBB\xBF".$file;
      fputs($datafile_fputs,$y);
 }
 fclose($datafile_fputs);

任何人都知道为什么fputs的行为方式不同以及如何解决它?

1 个答案:

答案 0 :(得分:0)

这是我能提出的唯一解决方案。当使用getallheaders将下面的代码运行到文件中时,$ _REQUEST ['data']的fput工作。我假设文件的标题设置为utf-8的BOM,因此在正确编码之后输入的所有内容。

 $file = "datafile_fputs";
 $datafile_fputs = fopen($file, "a");
      foreach (getallheaders() as $name => $value) {
           $y = "\xEF\xBB\xBF"; 
           $y .= "$name: $value\n";
           fputs($datafile_fputs,$y);
  }
  fputs($datafile_fputs,$_REQUEST['data']);
  fclose($datafile_fputs);