如何在PHP中使用fwrite编写保加利亚字符

时间:2012-02-17 06:52:27

标签: php

我有一个表单,表单输入除英语以外的所有。
当点击提交按钮时,我使用POST方法获取字符串。现在我想在一个名为'translate.php'的新文件中编写字符串。如果我使用fwrite它可以正常用于英语,但其他语言如'保加利亚'它会编写像1НАЧАЛО这样的Unicode标准 en:主页中的实际字词:保加利亚语:НАЧАЛО。
我可以用英文写作,但我不能用fwrite写保加利亚语 请有人帮我。

3 个答案:

答案 0 :(得分:1)

它不是fwrite转换你的角色,而是HTML实体,而不是Unicode。我想您网站的编码设置为Latin-1。这意味着浏览器会将输入表单的数据提交给以Latin-1编码的服务器。保加利亚语不包含在Latin-1中,也不能在其中编码,因此浏览器会将这些字符编码为HTML实体。

两种解决方案:

  1. 使用html_entity_decode($str, ENT_COMPAT, 'UTF-8')将这些HTML实体解码为实际的UTF-8
  2. (首选)以UTF-8为您的网站提供服务和/或在表单上设置accept-charset="utf-8"属性,以便浏览器将UTF-8数据提交给服务器
  3. 如需深入了解,请参阅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);
....