PHP 中的非英语字符



im在使用php将非英语字符写入文件(.txt)时遇到问题。 这是我的代码:

$str = "â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï";
$str = htmlentities($str, ENT_QUOTES, mb_detect_encoding($str));
$str =htmlspecialchars_decode(html_entity_decode($str),ENT_QUOTES);
$f = fopen("test.txt","w");
fputs($f,$str);
fclose($f);

当我打开文件时,结果是:â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï

例如,如您所见,欧元符号仍然没有正确出现在文件和其他符号中。

有人有解决这个问题的想法吗?

€ 的转换由 htmlentities() 函数完成;由于您要编码为 HTML 实体并立即解码,因此我建议省略此步骤:

$str = "â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï";
$f = fopen("test.txt","w");
fputs($f,$str);
fclose($f);

假设你想保留这个编码/解码业务(看起来你正在尝试使用编码/解码过程在字符集之间进行转换?

在编码步骤中,对输入字符串使用 mb_detect_encoding 并将其传递给 htmlentities ,这样可以正确检测输入中的欧元符号(大多数情况下)。

但是,在解码步骤中,您没有指定任何字符集,因此html_entity_decode将选择 ISO-8859-1,其中不包括欧元符号。

如果你想保持这个代码块大致相同,你需要选择一个字符集来解码,其中包括你想要的所有字符(如 UTF-8 或 ISO-8859-15)。

编辑:这是一个基于您的代码的示例(我选择了ISO-8859-15,但您确实需要知道或决定您想要的输出字符集):

$str = "â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï";
$str = htmlentities($str, ENT_QUOTES, mb_detect_encoding($str));
$str = html_entity_decode($str, ENT_QUOTES, 'ISO-8859-15');
$f = fopen("test.txt","w");
fputs($f,$str);
fclose($f);

相关内容

  • 没有找到相关文章

最新更新