在没有bom的情况下以utf-8保存文件
Posted
技术标签:
【中文标题】在没有bom的情况下以utf-8保存文件【英文标题】:save file in utf-8 without bom 【发布时间】:2012-06-17 21:09:42 【问题描述】:我有一个越南语表格,它将数据提交到网络服务。此 Web 服务将该数据保存在一个文件中。但是文件总是包含“0000”,没有别的......
在没有bom的情况下以utf-8保存数据编码的正确方法是什么?谢谢
这是我的 webservice.php:
if ($_SERVER["REQUEST_METHOD"] == "POST")
$data = $_POST["author"] . "\n" . $_POST["title"] . "\n" + $_POST["category"] . "\n" + $_POST["article"];
$fileName = mb_convert_encoding($_REQUEST["author"], "UTF-8", "auto");
$data = mb_convert_encoding($data, 'UTF-8', "auto");
file_put_contents($fileName, $data, FILE_APPEND | LOCK_EX);
print $data;
else
invalidRequest();
?>
【问题讨论】:
为什么需要转换?如果您使用 UTF8 格式制作页面,您应该能够准确地写入文件。 一项小研究表明,mb_convert_encoding
不支持没有BOM
的UTF-8
。要解决此问题,您可能需要从该字段中删除前 3 个字节。
对不起,我是 php 新手,你能更清楚地解释如何从字段中删除 3 个字节吗?起初我没有进行转换,但文件也只包含 "00000" 。顺便说一句,我在没有 Bom 的情况下用 UTF-8 对我的表单进行了编码。谢谢大家@fastreload
@fastreload - mb_convert_encoding 与文件中的数据有什么关系,无论是否有 BOM?
b/c 我在这里读到一篇文章,说如果我想用 utf8 保存文件,那么我必须使用 mb_convert_encoding
【参考方案1】:
您缺少 file_put_contents() 的文件名参数,您的代码不会将任何内容保存到文件中。
<edit>
也看看这个:
+ $_POST["category"] . "\n" + $_POST["article"];
^ ^
您在此处使用数学运算符 +,因此您的字符串将被转换为数字(在这种情况下为 0)
【讨论】:
【参考方案2】:您的表单应包含
<form ... accept-charset="UTF-8">
然后您可以在没有 mb_convert_encoding() 的情况下写入文件。但永远不要使用
$fileName = $_REQUEST["author"];
!类似的东西
$fileName = $author_names[$_REQUEST["author_id"]];
应该是安全的。
【讨论】:
对不起。它不起作用。与没有 BOM 的 UTF-8 有什么关系吗?谢谢 嗯,你提到的“0000”不是BOM。请参阅 link 了解 BOM 的外观。我会尝试通过删除不必要的转换来缩小问题范围。并且需要“接受字符集”来告诉浏览器发送 UTF-8,因此不必发生错误的服务器端转换。你用不同的浏览器试过了吗?以上是关于在没有bom的情况下以utf-8保存文件的主要内容,如果未能解决你的问题,请参考以下文章