问题在于程序有不同的方式来表示不同的字符。这称为字符编码。您的浏览器、服务器和 PHP 代码目前对您使用的编码感到困惑,因为您将UTF-8 字符与ANSI 代码混合在一起。
您可以在此处了解有关编码的更多信息:
http://vlaurie.com/computers2/Articles/characters.htm
每当我构建一个 UTF-8 PHP 站点时,我都会做三件事。这三件事应该可以解决您的问题:
添加 PHP UTF-8 标头
将此添加到代码的顶部:
<?php
header('Content-Type: text/html; charset=utf-8');
...
我相信这会指示其他服务器和您的浏览器使用 UTF-8 而不是 ANSI 解析此文档。您可以在此处阅读有关此内容的更多信息:
Set HTTP header to UTF-8 using PHP
添加 HTML UTF-8 元标记
将此代码添加到您返回的 HTML 的顶部:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
...
这还会指示您的浏览器以 UTF-8(而不是 ANSI)读取字符。您可以在此处阅读有关此内容的更多信息:
Set HTTP header to UTF-8 using PHP
将 PHP 文件另存为不带 BOM 的 UTF-8
默认情况下,您的文件通常以ANSI encoding. If you want to work with international characters, then you need to save them inUTF-8encoding. This will let you work with theÅ` 字符正确保存。
如果您使用 Notepad++ 作为文本编辑器,则可以在“编码”菜单下设置文档的编码。将其设置为Encode in UTF-8 without BOM。
遇到问题
UTF-8 without BOM 与 UTF-8 不同。 UTF-8 文件通常带有 3 个字节的数据,表明该文件是 UTF-8 文件。这称为Byte Order Mark (BOM)。您可以在此处阅读有关 BOM 的更多信息:http://www.arclab.com/products/amlc/utf-8-php-cannot-modify-header-information.html
无论如何,大多数程序都可以判断文件是 UTF-8,因此 BOM 是多余的。如果没有 BOM 不保存,您可能会收到如下错误消息:
Warning: Cannot modify header information – headers already sent
如果您看到此错误消息,那么您可能遇到了 BOM 问题。