问号字符在文本中显示,为什么会这样?
-
04-07-2019 - |
题
我有一个备份服务器,可以自动备份我的实时站点,包括文件和数据库。
在实际网站上,文本看起来很好,但是当您查看它的镜像版本时,它会显示“?”在一些文本中。该文本存储在新闻数据库表中。
以下是它在实时服务器上的屏幕截图,以及它在镜像服务器上的屏幕截图。
在将其备份到镜像服务器的过程中会发生什么?
解决方案
以下文章将非常有用
http://dev.mysql.com/doc/ refman / 5.0 / EN /字符集-syntax.html
http://dev.mysql.com/doc/ refman / 5.0 / EN /字符集-connection.html
连接到数据库后,发出以下命令:
SET NAMES'utf8';
确保您的网页也使用UTF-8编码:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
PHP还提供了几个对转换有用的功能:
其他提示
在<!>“mirror <!>”上编辑Apache配置文件;服务器(有问题的服务器),并注释掉以下行:
AddDefaultCharset UTF-8
然后重启Apache:
service httpd restart
问题是<!>“AddDefaultCharset UTF-8 <!>”; line覆盖.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; <!> quot;在Windows-1252编码中,通常在span标记之间找到,如下所示:
<span style="mso-spacerun: yes">ááá </span>
我来到这里寻找浏览器中显示的JavaScript解决方案,虽然与数据库没有直接关系......
在我的情况下,我将我在互联网上找到的一些文本复制并粘贴到JavaScript文件中并用Windows记事本保存。
当使用该JavaScript文件的页面输出字符串时,会出现问号(如问题中显示的问号),而不是像重音字母等特殊字符。
我使用 Notepad++
打开文件。在打开文件后,我看到字符编码设置为ANSI
,如下所示,您可以看到(页脚上的鼠标光标):
要解决此问题,请单击Encoding
中的Encode in UTF-8
菜单,然后选择<=>。你应该好好去。 :)
您的浏览器未正确解释页面的编码(因为您已将其强制设置为特定设置,或者页面设置不正确),因此无法显示某些字符。
这将与角色编码有关。
您确定镜像网站在字符编码方面与主服务器具有相同的属性吗?
根据您拥有的服务器类型,这可能是服务器进程本身的属性,也可能是环境变量。
例如,如果这是一个UNIX环境,也许尝试比较LANG或LC_ALL?
另见此处
检查镜像服务器发出的字符集。似乎与主服务器有所不同 - 实时站点似乎输出Unicode,而镜像则不是。此外,通常最好在传入的内容中清除Unicode字符,并用适当的HTML实体替换它们。
您的具体问题涉及<!>“智能引号,<!>”; <!>“em破折号<!>”;和<!> quot; en dashes。<!> quot;我知道你可以用—
替换em破折号和用–
代替n破折号(这应该在数据库的输入端完成);我不知道智能报价的正确替代品是什么。 (我通常只用'和所有卷曲的双引号替换所有卷曲的单引号<!>; ... ...排版极客可以随时拍摄我。)
我应该注意到,有些浏览器比其他浏览器更容易出现此问题 - Windows上的Internet Explorer会自动检测到并且<!>修复<!>这个; Firefox和大多数其他浏览器都会显示问号。
我通常会诅咒MS字,然后运行以下Wscript。
//替换为需要清理的文件的路径
PATH = <!> quot; test.html <!> quot;
var go = WScript.CreateObject(<!> quot; Scripting.FileSystemObject <!> quot;);
var content = go.GetFile(PATH).OpenAsTextStream()。ReadAll();
var out = go.CreateTextFile(<!> quot; clean - <!> quot; + PATH,true);
点击
//符号
含量= content.replace(<!> /#8220 /克, 'QUOT <!>;');结果
含量= content.replace(<!> /#8221 /克, 'QUOT <!>;');结果
含量= content.replace(/#8217 <!>; <!> /克和quot;'QUOT <!>);结果
含量= content.replace(<!> /#8211 /克,QUOT <!>; - QUOT <!>);结果
含量= content.replace(/#169 <!> /克,QUOT <!>; <!>安培;复印; QUOT <!>);结果
含量= content.replace(<!> /#174; /克,QUOT <!>; <!>安培; REG; QUOT <!>);结果
含量= content.replace(/#176 <!> /克,QUOT <!>; <!>安培;度; QUOT <!>);结果
含量= content.replace(/#182 <!> /克,QUOT <!>; LT <!>,P GT <!>; QUOT <!>);结果
含量= content.replace(<!> /#191 /克,QUOT <!>; <!>安培; iquest; QUOT <!>);结果
含量= content.replace(<!> /#161 /克, '安培<!>; iexcl;');结果
含量= content.replace(<!> /#162 /克, '安培<!>;分;');结果
含量= content.replace(<!> /#163 /克, '安培<!>;磅;');结果
含量= content.replace(<!> /#165 /克, '安培<!>;日元;');结果
点击
out.Write(内容);结果
Unicode或其他字符集字符是否落空?
我见过类似的<!>“奇怪的<!>”;当文本从电子邮件或其他文档格式(例如单词)复制到文本编辑器中时,我经常在工作的网站上显示字符。编辑器可以显示非ASCII字符,但浏览器不能。对于网站,我建议查找该字符的HTML实体代码并插入该代码......或切换到更标准的代码。