27

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

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

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

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

替代文字

实时服务器是Solaris,镜像服务器是 Linux Red Hat Linux 5。

4

9 回答 9

25

以下文章将很有用:

10.3 指定字符集和排序规则

10.4 连接字符集和排序规则

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

SET NAMES 'utf8';

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

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

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

于 2008-10-27T18:50:58.327 回答
11

在“镜像”服务器(有问题的服务器)上编辑 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>
于 2012-04-22T07:12:16.337 回答
5

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

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

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

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

在此处输入图像描述

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

于 2013-02-08T16:41:22.487 回答
1

Unicode 或其他字符集字符落空?

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

于 2008-10-27T18:49:13.227 回答
1

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

于 2008-10-27T18:49:20.140 回答
1

这将与字符编码有关。

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

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

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

另请参阅此处

于 2008-10-27T18:50:23.727 回答
0

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

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

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

于 2008-10-27T18:51:45.127 回答
0

我通常诅咒 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);
于 2008-10-27T19:16:19.757 回答
0

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

它确实是 Microsoft Word 编辑的一些遗物……

于 2020-05-30T05:14:24.177 回答