我将我的网站从我的本地测试服务器移动到NameCheap共享主机,现在我遇到了一个问题 - 一些页面没有正确显示utf-8特殊字符(而是显示问号)。所有页面都是utf-8编码,所有数据库表都是如此。奇怪的是,有些页面以一种看似随机的模式正确显示而有些页面没有显示。
例如,我的索引页面很好,但我的个人资料页面没有。 faq.html工作正常,但是当我将它重命名为faq.php时却没有。最奇怪的是,我有一个带有两个JQuery选项卡的页面,其中一个正确显示而另一个没有!
有人可以帮我解决这个问题吗?
答案 0 :(得分:50)
修复这个问题确实很烦人,但你可以试试这些。
首先,确保文件实际上以UTF-8格式保存。
然后检查您的HTML标头中是否有<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
。
您也可以尝试在PHP脚本的开头调用header('Content-Type: text/html; charset=utf-8');
或将AddDefaultCharset UTF-8
添加到.htaccess文件中。
答案 1 :(得分:6)
听起来如果您请求faq.html
,网络服务器会向您的浏览器发出信号,表明该文件采用UTF-8编码。
检查您的浏览器是否公布和使用了哪种编码,请参阅浏览器的文档如何操作。每个浏览器都有这个,通常可以通过菜单访问(指定您应该使用哪个网站的编码)并查看服务器返回的内容,您经常在页面属性中找到它。
然后听起来如果您请求faq.php
,网络服务器会在您的浏览器中显示该文件处于其他编码状态。根据默认的PHP配置设置,可能没有给出charset / encoding。由于它是一个PHP文件,您通常可以通过更改PHP配置default_charset
Docs指令来解决此问题:
default_charset = "UTF-8"
在主机上找到你的php.ini并相应地进行编辑。
如果您没有可用的php.ini,您可以使用ini_set
Docs函数通过代码进行更改:
ini_set('default_charset', 'UTF-8');
请注意在脚本中尽早更改此内容,因为PHP需要能够发送标头以使其正常工作,并且如果已经发送标头,则不能再设置标头。
手动发送Content-Type
标题行也可以:
header('Content-Type: text/html; charset=UTF-8');
此外,您最好输出的所有HTML页面都在HTML <head>
部分中包含此标题:
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
...
希望这有用。
答案 2 :(得分:3)
将元标记设置为
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
使用链接http://www.i18nqa.com/debug/utf8-debug.html替换所需的符号字符。
然后使用str_replace,如
$find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
$replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);
它使用的方法和帮助很多。谢谢!
答案 3 :(得分:2)
如果你正在使用PHP并且没有上述工作(就像我的情况那样),你需要使用utf-8编码设置语言环境。
喜欢这个
setlocale(LC_ALL, 'fr_CA.utf-8');
答案 4 :(得分:2)
我使用utf8_encode();
来解决我的问题$ str =“kamé”;
echo utf8_encode($ str);
希望这有助于某人。
答案 5 :(得分:1)
如果所有其他答案都不适合您,请尝试禁用HTTP输入编码翻译。
这是与PHP扩展 mbstring 相关的设置。 这是我的问题。默认情况下,我的服务器已启用此设置。
答案 6 :(得分:1)
问题是因为您的文件没有相同的编码。 首先在所有文件中运行以下命令:
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
在此之后您可以运行文件-i fixedx / index.html,您将看到您的文件现在位于uft-8
答案 7 :(得分:0)
在head标签中添加以下行解决了我的问题。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">