我有一个表单,表单输入除英语以外的所有。
当点击提交按钮时,我使用POST方法获取字符串。现在我想在一个名为'translate.php'的新文件中编写字符串。如果我使用fwrite它可以正常用于英语,但其他语言如'保加利亚'它会编写像1НАЧАЛО
这样的Unicode标准
en:主页中的实际字词:保加利亚语:НАЧАЛО。
我可以用英文写作,但我不能用fwrite写保加利亚语
请有人帮我。
答案 0 :(得分:1)
它不是fwrite
转换你的角色,而是HTML实体,而不是Unicode。我想您网站的编码设置为Latin-1。这意味着浏览器会将输入表单的数据提交给以Latin-1编码的服务器。保加利亚语不包含在Latin-1中,也不能在其中编码,因此浏览器会将这些字符编码为HTML实体。
两种解决方案:
html_entity_decode($str, ENT_COMPAT, 'UTF-8')
将这些HTML实体解码为实际的UTF-8 accept-charset="utf-8"
属性,以便浏览器将UTF-8数据提交给服务器如需深入了解,请参阅Handling Unicode in a Webapp。
答案 1 :(得分:1)
不知道这是不是你的情况,但是当你需要在另一个应用程序中使用UTF8内容的文件时,它必须包含一个标记为UTF8文件的标题。
我使用下面的代码写入文件并将其作为下载提供给浏览器。请参阅以下add UTF-8 byte order mark
:
header('Content-type: text/plain; charset=utf-8');
header('Content-Disposition: attachment; filename="UTF8 encoded file.sql"');
$f= fopen('php://output', 'w');
// add UTF-8 byte order mark
fwrite($f, pack("CCC",0xef,0xbb,0xbf));
fwrite($f, $fileOutput);
fclose($f);
同样,如果你当前写入文件的方法没有按预期工作(你没有发布代码),这只是要记住的事情。
答案 2 :(得分:0)
我不知道您的代码是什么样的,但您可以尝试:
....
$string = utf8_encode($posted_string);
$f = fopen('/path/to/translate.php',"w");
fwrite($f, $string);
fclose($f);
....