出于什么原因,我的文字在这个简短的代码中包含黑色钻石?

时间:2011-09-21 13:35:49

标签: php unicode utf-8

我使用以下代码在localhost上创建了一个文件:

<?php

header('Content-Type: text/plain; charset=UTF-8');

echo "yoá";

我的Firefox中的输出是:

enter image description here

为什么使用Unicode替换字符?

3 个答案:

答案 0 :(得分:5)

因为您的PHP脚本文件未从编辑器中保存为UTF-8。所有体面的编辑器都允许您在几种不同的编码之间进行转换和保存(甚至记事本现在都这样做)。保存为UTF-8,您将看到该字符正常显示。

技术说明

有问题的字符是代码点U + 00E1(“带有急性的拉丁文小写字母”)。假设您已使用单字节编码(最有可能)保存脚本,则此字符将由十六进制值为0xE1的字节表示,二进制值为

11100001

UTF-8 encoding rules,我们看到此字节属于

类别
1110zzzz

这是在代码点范围U + 0800到U + FFFF中编码单个字符的正好三个字节中的第一个。但是,在您的情况下,在此之后不再有字节,或者如果它们不满足UTF-8编码限制。

因此,浏览器确定存在格式错误的字节序列并改为显示问号。

答案 1 :(得分:0)

您正在发送一个utf-8标头,但您的源文件未设置为(并保存为)utf-8。检查代码编辑器/ ide的设置以更正它。

答案 2 :(得分:-1)

试试这个:

 header('Content-Type: text/plain; charset=UTF-8'); 
 $txt= "yoá";
 echo iconv("ISO-8859-1","UTF-8",$txt);

如果你不确定字符串是否有效UTF8然后用lib来测试它

  http://hsivonen.iki.fi/php-utf8/

  if(is_valid_utf8($txt)==true)  ....