我使用以下代码在localhost上创建了一个文件:
<?php
header('Content-Type: text/plain; charset=UTF-8');
echo "yoá";
我的Firefox中的输出是:
为什么使用Unicode替换字符?
答案 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) ....