PHP显示ISO-8859-1中的utf-8

PHP显示ISO-8859-1中的utf-8,php,utf-8,iso-8859-1,Php,Utf 8,Iso 8859 1,如何正确显示$string,就像它在$string\u结果中显示一样 $string = "&#195;&#x20ac;"; $string = html_entity_decode($string); //output as À $string_result = "À"; echo "<br>This: " . $string; echo "<br>Should become: " . ($string_result); 如果我在代码($str

如何正确显示$string,就像它在$string\u结果中显示一样

$string = "&#195;&#x20ac;";
$string = html_entity_decode($string); //output as À
$string_result = "À";

echo "<br>This: " .  $string;
echo "<br>Should become: " . ($string_result);
如果我在代码($string_result)中硬编码了À,则显示是正确的,但如果在变量($string)中分配了它,则其显示与$string_result不同

奇怪的是当我这么做的时候:

echo htmlentities($string);
echo htmlentities($string_result);
输出如下

&Atilde;&euro;
&Agrave;
添加标题:

header('Content-Type: text/html; charset=utf-8');

在代码的开头。

不管你是否放入标题,它仍然是错误的。你确定解码的实体应该与你期望的一样吗?@m.nachury请参阅deceze和我在问题下添加的注释。数据比原始问题所暗示的更混乱,所以这绝对不是浏览器显示的问题。这里真的有点混乱!这些不是字符“À”的HTML实体。这里的内容是将HTML实体解码为一种编码,但随后您希望将其解释为另一种编码,在这种编码中,它恰好收敛到您期望的字符。首先,为什么会有这些混乱的HTML实体?这是您需要在源代码处解决的问题。如果需要“À”,则需要HTML实体
À,而不是A字和欧元符号。正如deceze所说,如果您的输入是
À,已经完全乱码了。可能发生的情况是,单个Unicode代码点U+00C0已在UTF-8中表示为字节序列0xC3 0x80;该字节序列已作为Windows代码页1252(非ISO 8859-1)读回,在这里它将表示
,然后使用支持Unicode的编码器进行HTML编码,该编码器将欧元符号转换为
。如果你的输入一直是这样,你也许可以对原始文本进行反向工程,但它很可能是不可恢复的垃圾,$string_结果为空,因此我认为它只能在chrome@butching我向你保证,这绝对与浏览器显示无关。您已经损坏了数据,需要在源位置修复该数据,或者准确地计算出数据损坏的步骤,并仔细地反转这些步骤,希望它们都不会导致数据丢失(例如,删除在所涉及的编码之一中无效/不可打印的字节序列)。
header('Content-Type: text/html; charset=utf-8');