我有一个备份服务器,可以自动备份我的实时站点,包括文件和数据库。
在实际网站上,文本看起来很好,但是当您查看它的镜像版本时,它会显示“?”在一些文本中。该文本存储在新闻数据库表中。
以下是它在实时服务器上的屏幕截图,以及它在镜像服务器上的屏幕截图。
在将其备份到镜像服务器的过程中会发生什么?
答案 0 :(得分:20)
以下文章将非常有用
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
连接到数据库后,发出以下命令:
SET NAMES'utf8';
确保您的网页也使用UTF-8编码:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
PHP还提供了几个对转换有用的功能:
答案 1 :(得分:11)
在“镜像”服务器(有问题的服务器)上编辑Apache配置文件,并注释掉以下行:
AddDefaultCharset UTF-8
然后重启Apache:
service httpd restart
问题是“AddDefaultCharset UTF-8”行会覆盖.html文件中指定的Content-Type; e.g:
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
最常见的症状是127以上的字符代码显示为带有问号的黑色钻石(在Chrome,Safari或Firefox中),或者显示为小盒子(在IE和Opera中)。 Microsoft Word生成的HTML文件通常包含许多此类字符,最常见的字符代码为160 = 0xA0,相当于“&amp; nbsp;”在Windows-1252编码中,通常在span标记之间找到,如下所示:
<span style="mso-spacerun: yes">ááá </span>
答案 2 :(得分:3)
我来到这里寻找浏览器中显示的JavaScript解决方案,虽然与数据库没有直接关系......
在我的情况下,我将我在互联网上找到的一些文本复制并粘贴到JavaScript文件中并用Windows记事本保存。
当使用该JavaScript文件的页面输出字符串时,会出现问号(如问题中显示的问号),而不是像重音字母等特殊字符。
我使用Notepad++
打开了文件。在打开文件后,我看到字符编码设置为ANSI
,如下所示,您可以看到(页脚上的鼠标光标):
要解决此问题,请点击Encoding
中的Notepad++
菜单,然后选择Encode in UTF-8
。你应该好好去。 :)
答案 3 :(得分:1)
您的浏览器未正确解释页面的编码(因为您已将其强制设置为特定设置,或者页面设置不正确),因此无法显示某些字符。
答案 4 :(得分:1)
这将与角色编码有关。
您确定镜像网站在字符编码方面与主服务器具有相同的属性吗?
根据您拥有的服务器类型,这可能是服务器进程本身的属性,也可能是环境变量。
例如,如果这是一个UNIX环境,也许尝试比较LANG或LC_ALL?
另见here
答案 5 :(得分:0)
Unicode或其他字符集字符是否落空?
我已经看到类似的“奇怪”字符出现在我经常处理的网站上,当文本从电子邮件或其他文档格式(例如单词)复制到文本编辑器中时。编辑器可以显示非ASCII字符,但浏览器不能。对于网站,我建议查找该字符的HTML实体代码并插入该代码......或切换到更标准的代码。
答案 6 :(得分:0)
检查镜像服务器发出的字符集。似乎与主服务器有所不同 - 实时站点似乎输出Unicode,而镜像则不是。此外,通常最好在传入的内容中清除Unicode字符,并用适当的HTML实体替换它们。
您的具体问题涉及“智能引号”,“em破折号”和“破折号”。我知道你可以更换时间与破折号—
和正破折号与–
(这应该在你的数据库的输入端进行);我不知道智能报价的正确替代品是什么。 (我通常只是更换所有卷曲的单引号用“,并以”一切卷曲双引号...印刷术爱好者可以随意拍我的视线。)
我要指出,一些浏览器比其他人有这个问题更多的宽容 - Internet Explorer的Windows上趋于自动神奇地检测并“修复”这一点; Firefox和大多数其他浏览器都会显示问号。
答案 7 :(得分:0)
我经常诅咒MS字然后运行以下Wscript。
//替换为需要清理的文件的路径
PATH =“test.html”
var go = WScript.CreateObject(“Scripting.FileSystemObject”);
var content = go.GetFile(PATH).OpenAsTextStream()。ReadAll();
var out = go.CreateTextFile(“clean - ”+ PATH,true);
//符号
含量= content.replace(/“/ G '“');
含量= content.replace(/” / G '“');
含量= content.replace(/” / G “”“);
含量= content.replace(/ - /克, “ - ”);
含量= content.replace(/©/ g的, “&安培;复印;”);
含量= content.replace(/®/ g的, “&安培; REG;”);
含量= content.replace(/°/克, “&安培;度;”);
含量= content.replace(/¶/ g的, “&LT; P&gt;” 中);
含量= content.replace(/¿/ g的, “&安培; iquest;”);
含量= content.replace(/¡/克, '&安培; iexcl;');
含量= content.replace(/¢/克, '&安培;分;');
含量= content.replace(/£/克, '&安培;磅;');
含量= content.replace(/¥/克, '&安培;日元;');
out.Write(内容);
答案 8 :(得分:0)
我遇到了这个问题,所以我只是拿走了所有内容,将其复制/粘贴到记事本中,制作了一个新的php文件,然后粘贴回去,重新保存并改写,然后..奏效了!确实是Microsoft Word编辑的遗物...