PHP中的非英文字符

时间:2011-05-06 15:12:26

标签: php html file encoding entities

我在使用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æ߀¿×÷¡ï

正如您所看到的那样,欧元符号在文件和其他符号中仍然没有正确显示。

任何人都有想法解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

€的转换由htmlentities()函数完成;既然您正在编码成HTML实体并在之后解码,我建议将此步骤留下:

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

答案 1 :(得分:1)

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

在编码步骤中,您在输入字符串上使用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);