utf-8特殊字符不显示

时间:2011-12-02 12:14:24

标签: php html encoding utf-8

我将我的网站从我的本地测试服务器移动到NameCheap共享主机,现在我遇到了一个问题 - 一些页面没有正确显示utf-8特殊字符(而是显示问号)。所有页面都是utf-8编码,所有数据库表都是如此。奇怪的是,有些页面以一种看似随机的模式正确显示而有些页面没有显示。

例如,我的索引页面很好,但我的个人资料页面没有。 faq.html工作正常,但是当我将它重命名为faq.php时却没有。最奇怪的是,我有一个带有两个JQuery选项卡的页面,其中一个正确显示而另一个没有!

有人可以帮我解决这个问题吗?

8 个答案:

答案 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_charsetDocs指令来解决此问题:

default_charset = "UTF-8"

在主机上找到你的php.ini并相应地进行编辑。

如果您没有可用的php.ini,您可以使用ini_setDocs函数通过代码进行更改:

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">