【问题标题】:PHP file_put_contents and UTF-8 [closed]PHP file_put_contents 和 UTF-8 [关闭]
【发布时间】:2012-06-22 08:27:06
【问题描述】:

我有读取远程文件内容并将其写入本地服务器的脚本。文件包含字符:ąčęėįšųūž。数据插入本地文件后,UTF-8 编码丢失。 我的脚本代码:

<?php 

$data = file_get_contents('remote_file_address');

echo $data; //encoding is ok

$file = dirname(__FILE__) . '/../downloads/data.csv';

file_put_contents($file,$data); //invalid encoding in data.csv file

?>

我也按照这个帖子(How to write file in UTF-8 format?)的说明进行操作,但还是不行。

那有什么问题呢?有什么想法吗?

【问题讨论】:

  • 在 php.net 上有很多关于这个的 cmets。 php.net/manual/de/function.file-put-contents.php 。您是否尝试过像 file_put_contents($myFile, utf8_encode($myContent)); 这样重新编码数据或像 file_put_contents($myFile, "\xEF\xBB\xBF".$myContent); 这样设置 BOM?
  • 如果它无效,当你执行echo file_get_contents(dirname(__FILE__) . '/../downloads/data.csv'); 时应该会看到问题。是这样吗?
  • @sofl,是的,这些方法我都试过了。
  • @Bounce 你是怎么确定编码错误的?
  • @Bounce:你怎么知道编码失效了?顺便说一句,编码是什么?

标签: php


【解决方案1】:

问题是使用 windows-1257 编码的远程文件。我找到了解决方案here

所以正确的代码应该是这样的:

<?php 

$data = file_get_contents('remote_file_address');

$data = iconv("CP1257","UTF-8", $data);

$file = dirname(__FILE__) . '/../downloads/data.csv';

file_put_contents($file,$data);

?>

【讨论】:

【解决方案2】:

PHP 不知道编码。 PHP 中的字符串只是存储原始字节的字节数组。从某处读取字符串时,文本以原始字节读取并存储在原始字节中。写入文件时,PHP 将原始字节写入文件。 PHP 在任何时候都不会自行转换编码。 你不需要在任何时候做任何特别的事情,你需要做的就是不要自己弄乱编码.如果一开始编码是UTF-8,不碰它还是UTF-8。

如果在其他程序中打开最终文件时编码奇怪,很可能是其他程序误解了编码。文件很好,只是显示不正确。

【讨论】:

    【解决方案3】:

    确保您的脚本和远程文件以 UTF-8 编码,并确保您用于读取 data.csv 的软件以 UTF-8 读取它。我个人使用 Notepad++ 来检查这一点。 如果你所有的东西都是 UTF-8,你不需要任何 *utf8_(en|de)code 函数。 如果您的远程文件未以 UTF-8 编码,则必须使用它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2021-09-26
      • 2012-06-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      相关资源
      最近更新 更多