【问题标题】:Question mark characters display within text. Why is this?问号字符显示在文本中。为什么是这样?
【发布时间】:2010-09-19 10:53:04
【问题描述】:

我有一个备份服务器,可以自动备份我的实时站点,包括文件和数据库。

在实时站点上,文本看起来不错,但是当您查看它的镜像版本时,它会显示“?”在一些文本中。此文本存储在新闻数据库表中。

这是它在实时服务器上和镜像服务器上的屏幕截图。

在将其备份到镜像服务器的过程中会发生什么?

直播服务器为Solaris,镜像服务器为LinuxRed Hat Linux5。

【问题讨论】:

    标签: html backup character-encoding mirror


    【解决方案1】:

    Unicode 或其他字符集字符不合格?

    当文本从电子邮件或其他文档格式(例如 word)复制到文本编辑器时,我经常在我工作过的网站上看到类似的“奇怪”字符。编辑器可以显示非 ASCII 字符,但浏览器不能。对于该网站,我建议查找该字符的 HTML 实体代码并插入它...或切换到更标准的代码。

    【讨论】:

      【解决方案2】:

      您的浏览器未正确解释页面的编码(可能是因为您已将其强制为特定设置,或者页面设置不正确),因此无法显示某些字符。

      【讨论】:

        【解决方案3】:

        这将与字符编码有关。

        您确定镜像站点在字符编码方面与您的主服务器具有相同的属性吗?

        根据您拥有的服务器类型,这可能是服务器进程本身的属性,也可能是环境变量。

        例如,如果这是一个 UNIX 环境,也许尝试比较 LANG 或 LC_ALL?

        另见here

        【讨论】:

        • 实时服务器是 Solaris,镜像服务器是 Linux rhel5,如果有区别的话。
        • Linux 也使用 LANG/LC_ALL。例如:linux.com/base/ldp/howto/Indic-Fonts-HOWTO/locale.html
        • 还可以查看是否可以检查从两个服务器返回的 HTTP 标头,以查找与字符编码相关的明显差异。
        【解决方案4】:

        以下文章会很有用:

        10.3 Specifying Character Sets and Collations

        10.4 Connection Character Sets and Collations

        连接到数据库后,发出以下命令:

        SET NAMES 'utf8';
        

        确保您的网页也使用 UTF-8 编码:

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        

        PHP 还提供了几个对转换有用的函数:

        【讨论】:

          【解决方案5】:

          检查镜像服务器发出的字符集。这似乎与主服务器有所不同——实时站点似乎正在输出 Unicode,而镜像则没有。此外,清理传入内容中的 Unicode 字符并将其替换为相应的 HTML 实体通常是个好主意。

          您的具体问题与“smart quotes”、“em dashes”和“en dashes”有关。我知道您可以用 &amp;mdash; 替换 em 破折号,用 &amp;ndash; 替换 n-dashes(应该在数据库的输入端完成);我不知道智能引号的正确替换是什么。 (我通常只是用 ' 替换所有大弯单引号,用 " 替换所有大弯双引号......排版极客可能会在看到我时随意射击。)

          我应该注意到,在这个问题上,一些浏览器比其他浏览器更宽容——Windows 上的 Internet Explorer 倾向于自动检测并“修复”这个问题; Firefox 和大多数其他浏览器都会显示问号。

          【讨论】:

            【解决方案6】:

            我通常会诅咒 MS Word,然后运行以下 Windows Script Host 脚本。

            // Replace with path to a file that needs cleaning
            PATH = "test.html"
            
            var go = WScript.CreateObject("Scripting.FileSystemObject");
            var content = go.GetFile(PATH).OpenAsTextStream().ReadAll();
            var out = go.CreateTextFile("clean-"+PATH, true);
            
            // Symbols
            content = content.replace(/“/g, '"');
            content = content.replace(/”/g, '"');
            content = content.replace(/’/g, "'");
            content = content.replace(/–/g, "-");
            content = content.replace(/©/g, "&copy;");
            content = content.replace(/®/g, "&reg;");
            content = content.replace(/°/g, "&deg;");
            content = content.replace(/¶/g, "<p>");
            content = content.replace(/¿/g, "&iquest;");
            content = content.replace(/¡/g, '&iexcl;');
            content = content.replace(/¢/g, '&cent;');
            content = content.replace(/£/g, '&pound;');
            content = content.replace(/¥/g, '&yen;');
            
            out.Write(content);
            

            【讨论】:

            • 您可能要添加:content=content.replace(/á/g,' ');
            • WSH 只是一个主机。它是什么编程语言? JavaScript? CS-Script?
            【解决方案7】:

            在“镜像”服务器(有问题的服务器)上编辑您的 Apache 配置文件,并注释掉以下行:

            AddDefaultCharset UTF-8
            

            然后重启Apache:

            service httpd restart
            

            问题是“AddDefaultCharset UTF-8”行覆盖了.html文件中指定的Content-Type;例如:

            <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
            

            最常见的症状是 127 以上的字符代码显示为带有问号的黑色菱形(在 Chrome、Safari 或 Firefox 中)或显示为小方框(在 Internet Explorer 和 Opera 中)。

            Microsoft Word 生成的 HTML 文件通常有很多这样的字符,最常见的是字符代码 160 = 0xA0,相当于“ ”在Windows-1252编码中,经常出现在span标签之间,像这样:

            <span style="mso-spacerun: yes">ááá </span>
            

            【讨论】:

            • 注释掉默认字符集行对我有用,需要 ISO-8859-1。干杯。
            • 这是我的问题。我完全忘记了在我的配置文件中定义字符集。
            • 是的,这是我的问题 - 字符集设置为 UTF-8,但字符是 windows-1252。这就是我从 word doc 复制粘贴得到的结果
            • 你能告诉我需要更改的文件名吗
            • 在我的(年长的)Web 服务器上,Apache 配置文件是:/etc/httpd.conf 它也可能位于以下位置之一:/etc/apache2/httpd.conf /etc/apache2/ apache2.conf /etc/httpd/httpd.conf /etc/httpd/conf/httpd.conf
            【解决方案8】:

            我来这里是为了寻找在浏览器中显示的 JavaScript 的解决方案,虽然与数据库没有直接关系...

            就我而言,我将在 Internet 上找到的一些文本复制并粘贴到一个 JavaScript 文件中,并使用 Windows Notepad 保存。

            当使用该 JavaScript 文件的页面输出字符串时,有问号(如问题中显示的那些),而不是重音字母等特殊字符。

            我使用Notepad++ 打开了文件。打开文件后,我看到字符编码设置为 ANSI,如下图所示(鼠标光标在页脚上):

            要解决此问题,请单击 Notepad++ 中的 编码 菜单,然后选择 UTF-8 编码。你应该很高兴。 :)

            【讨论】:

              【解决方案9】:

              我遇到了这个问题,所以我只是把我的所有内容复制/粘贴到Notepad,创建了一个新的 PHP 文件,重新粘贴,重新保存并覆盖,然后.. 成功了!

              这确实是 Microsoft Word 编辑的一些遗物......

              【讨论】:

              • 对所有 Unicode 字符(非 7 位 ASCII)进行转换可能是不可接受的。
              猜你喜欢
              • 2015-08-24
              • 2013-08-21
              • 1970-01-01
              • 2010-09-18
              • 1970-01-01
              • 1970-01-01
              • 2011-01-08
              • 2014-11-06
              • 2016-06-03
              相关资源
              最近更新 更多