Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中使用fwrite编写保加利亚字符_Php - Fatal编程技术网

如何在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脚本中。