开发者

In PHP, when I use fwrite, I don't get the correct character set

Here is my code:

<?php
  header("Content-Type: text/html; charset=UTF-8");
  header("Content-Type: application/x-javascript; charset=UTF-8");

  $fName = "开发者_StackOverflowdemo.txt";
  $str   = "óé";
  fid   = fopen($fName, 'wb') or die("can't open file"); // Open file

  fwrite($fid, $str); // Write to file
  fclose($fid);         // Close file
?>

To the screen, the output is:

óéü

When I open the file I get:

óéü

I am trying to save large amounts of data using fwrite, but the characters are not encoding correctly at the point of file save.

Thanks in advance.


fwrite stores strings binary. It does not do any charset conversion. It's more likely that your PHP script is in a wrong charset, and thus the original "óéü" string. Show us the bin2hex($str) and bin2hex(file_get_contents('demo.txt')) if you can't debug it yourself.

There are some generic options to solve such problems:

  • Using utf8_encode($str) before saving.
  • Writing the UTF-8 BOM into the output file first fwrite($f, "\xEF\xBB\xBF")
  • correct conversion with iconv()
  • or adapting the php script itself with recode L1..UTF8 script.php


what program are you using to "open" the file? that program could be the problem.


First, insert the utf_encode inside the fwrite, like this:

<?php

$fName = "demo.txt";
$str   = "óé";
fid   = fopen($fName, 'wb') or die("can't open file"); // Open file

fwrite($fid, utf_encode($str)); // Write to file
fclose($fid);         // Close file
?> 

Next, remember to save your PHP script with UTF-8 without BOM encoding. Use any advanced code editor like Notepad++ to do this.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜