如何在PHP中使用fwrite编写保加利亚字符
我有一个表单,表单输入除英语以外的所有语言。如何在PHP中使用fwrite编写保加利亚字符,php,Php,我有一个表单,表单输入除英语以外的所有语言。单击提交按钮时,我使用POST方法获取字符串。现在我想在一个名为'translate.php'的新文件中编写字符串。如果我使用fwrite,它可以正确地用于英语,但其他语言,如“保加利亚语”将编写一个Unicode标准,如1НАЧАЛО 英语中的实际单词:Home保加利亚语:АЧАЛö。 我可以用英语写作,但不能用法语写保加利亚语。 任何人都可以帮助我。转换字符的不是fwrite,而
单击提交按钮时,我使用POST方法获取字符串。现在我想在一个名为'translate.php'的新文件中编写字符串。如果我使用fwrite,它可以正确地用于英语,但其他语言,如“保加利亚语”将编写一个Unicode标准,如
1НАЧАЛО代码>
英语中的实际单词:Home
保加利亚语:АЧАЛö。
我可以用英语写作,但不能用法语写保加利亚语。
任何人都可以帮助我。转换字符的不是fwrite
,而是HTML实体,而不是Unicode。我猜你网站的编码设置为拉丁-1。这意味着浏览器将把输入表单的数据提交到您的服务器,并以拉丁语1编码。保加利亚语不包含在拉丁语-1中,并且不能在其中编码,因此浏览器将这些字符编码为HTML实体
两种解决方案:
用于将这些HTML实体解码为实际的UTF-8
(首选)使用UTF-8服务您的站点和/或在表单上设置accept charset=“UTF-8”
属性,以便浏览器将UTF-8数据提交给服务器
要深入了解这一点,请参阅。我不知道您的代码是什么样子的,但您可以尝试一下:
....
$string = utf8_encode($posted_string);
$f = fopen('/path/to/translate.php',"w");
fwrite($f, $string);
fclose($f);
....
不知道这是否是您的情况,但当您在另一个应用程序中需要包含UTF8内容的文件时,它必须包含一个标头,标记为UTF8文件
我使用下面的代码写入一个文件,并将其作为下载提供给浏览器。请参见下面的行添加UTF-8字节顺序标记
:
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);
同样,如果您当前写入文件的方法没有按预期工作(您没有发布该方法的代码),则需要记住这一点。
utf8\u encode
将拉丁语编码的字符串转换为UTF-8。除非你想把拉丁1编码的文本转换成UTF-8编码的文本,否则这根本没有用。。因为我认为站点编码设置为Latin-1。重要的是站点编码,在这种编码中,将检索发布的数据。。如果站点编码不正确,我认为会有一些问题。utf8\u encode
唯一做的就是将拉丁语-1(确切地说是ISO-8859-1)编码字符串编码为UTF-8!文档中有这样的描述,UTF-8不需要BOM。它是可选的,一些软件需要它,其他软件支持它,但如果存在BOM,其他软件会失败。安全的选择是不包括BOM表,并且仅当需要打开文件的应用程序需要BOM表(主要是MS程序)时才包括BOM表。是的,你是对的。这里可能不是这样,因为他写入的文件是一个translate.php
,可能会包含在其他php脚本中。