我将我的网站从本地测试服务器迁移到了NameCheap共享托管,现在遇到了一个问题 - 一些页面无法正确显示utf-8特殊字符(显示问号)。所有页面都是utf-8编码的,所有数据库表也是如此。奇怪的是,一些页面可以正确显示,而一些页面不行,似乎是随机的模式。
例如,我的首页没问题,但我的个人资料页面有问题。faq.html可以正常工作,但重命名为faq.php后就不行了。最奇怪的是,我有一个带有两个JQuery选项卡的页面,其中一个可以正确显示,另一个却不能!
有人能帮我解决这个问题吗?
我将我的网站从本地测试服务器迁移到了NameCheap共享托管,现在遇到了一个问题 - 一些页面无法正确显示utf-8特殊字符(显示问号)。所有页面都是utf-8编码的,所有数据库表也是如此。奇怪的是,一些页面可以正确显示,而一些页面不行,似乎是随机的模式。
例如,我的首页没问题,但我的个人资料页面有问题。faq.html可以正常工作,但重命名为faq.php后就不行了。最奇怪的是,我有一个带有两个JQuery选项卡的页面,其中一个可以正确显示,另一个却不能!
有人能帮我解决这个问题吗?
这是一个很麻烦的问题,但你可以尝试以下方法。
首先,请确保文件实际上已保存为UTF-8格式。
然后检查在你的HTML头部是否有<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
。
你也可以尝试在PHP脚本的开头调用 header('Content-Type: text/html; charset=utf-8');
或者在你的 .htaccess 文件中添加 AddDefaultCharset UTF-8
。
ä
如果浏览器读取为UTF-8,但实际文件不是,则会显示为�
。 - RCEfaq.html
时,Web服务器会向浏览器发出文件使用UTF-8编码的信号。请检查您的浏览器所宣布和使用的编码,请参阅您的浏览器文档以了解如何进行操作。每个浏览器都有此功能,通常可以通过菜单访问(指定您希望使用哪个网站的编码),并且要查看服务器返回的内容,则通常可以在页面属性中找到。faq.php
时,Web服务器向浏览器发出文件使用其他编码的信号。可能没有按默认PHP配置设置给出字符集/编码。由于这是一个PHP文件,因此您可以通过更改PHP配置default_charset
Docs指令来解决此问题。default_charset = "UTF-8"
在主机上找到您的php.ini文件,并进行相应的编辑。
如果您没有可用的php.ini文件,您也可以通过使用ini_set
文档函数进行编程来更改此设置:
ini_set('default_charset', 'UTF-8');
请注意,在脚本的早期更改此设置,因为PHP需要能够发送头文件才能使其工作,如果已经发送了头文件,则无法再次设置。
也可以手动发送Content-Type
头行:
header('Content-Type: text/html; charset=UTF-8');
<head>
部分添加以下标题,这是良好的实践:<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
...
如果您正在使用 PHP,而上述方法均未能解决问题(就像我的情况一样),则需要使用 utf-8 编码设置本地化(locale)。
像这样:
setlocale(LC_ALL, 'fr_CA.utf-8');
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
然后使用 str_replace,如下:
$find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
$replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);
这是我使用并帮助很多人的方法。谢谢!
我通过使用utf8_encode()解决了我的问题。
$str = "kamé";
echo utf8_encode($str);
希望这能帮助到某些人。
file -i filename.*
为了解决问题,您需要将所有文件更改为uft-8。您可以使用命令iconv来完成:
iconv -f fromcode -t tocode filename > newfilename
例子:
iconv -f iso-8859-1 -t utf-8 index.html > fixed/index.html
在此之后,您可以运行 file -i fixedx/index.html 命令,然后您会看到您的文件现在已经是 utf-8 编码了。
如果以上方法都不起作用,可能是mysqli连接编码的问题。
在我的情况下,php文件(whatever.php)采用UTF-8编码,HTML声明为UTF-8,数据库甚至也是UTF-8,但字符仍然无法正确显示。
显然,mysqli决定使用不同的编码方式。
所以我添加了
$conn->set_charset("utf8");
在
$conn = new mysqli($servername, $username, $password, $dbname);
之后,它就可以工作了。
如果您的数据库表是utf8mb4_unicode_ci
而不是utf8_general_ci
,则请改为:
$conn->set_charset("utf8mb4");
进入phpmyadmin(或您喜欢的数据库管理器)并检查您的表使用的编码方式,以选择正确的编码方式。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">