2011-02-27 102 views
0

这里是我找到的链接,甚至有一个角色我需要为我的其他项目玩。PHP的Unicode字符问题

http://www.fileformat.info/info/unicode/char/2446/index.htm

没有与标题的对话框:这页上的“编码”。我想知道一些行。

我显然需要这样的课程,但我想知道“HTML实体(十进制)”和“HTML实体(十六进制)”之间的区别是什么。

有趣的是,它让我感到困惑,我把这些字符扔在网页上,并且它们显示正常。但我没有在php页面中指定任何UTF-8编码。

<?php 
$string1 = '&#x2446;'; 
$string2 = '&#9286;'; 

echo $string1; 
echo '<br>'; 
echo $string2; 
?> 

浏览器是否知道如何自动显示两者? 为了让它变得更加怪异,我只能在我的Mac上看到Firefox中的这些字符。 但我的窗口框不想显示它们。我已经在Chrome和Firefox中测试过它。我需要告诉浏览器正确查看它们吗?还是它是一个操作系统修改?

回答

0

您可以在任何编码和实践中使用任何“HTML实体”,如果您已安装适当的字体,则每个浏览器都可以正常工作。那么,它是为了显示当前编码中未包含的字符而创建的。在你的情况下,它看起来你必须在你的Windows机器上安装一些字体。

另一方面,它几乎与PHP无关。

+0

似乎是这样的。我的Windows系统上的字体并不像我的Mac字体那么耐用。出于好奇,一个人去哪里更新他们的字体? – coffeemonitor 2011-02-27 23:45:06

+0

您可以购买它们,从互联网下载免费字体,安装可选的操作系统包,使用其他字体安装应用程序...... – Michas 2011-02-27 23:50:23

2

它们都是有效的数字HTML实体,浏览器确实知道如何解码它们。不同之处在于第一个是hexadecimal,而后者是十进制。

0x2446 = 9286

请注意,0x表示十六进制。

另请注意,最好始终让服务器明确指定编码。 W3C explains该怎么做。 UTF-8是一个不错的选择。

如果您使用任何Unicode编码,您始终可以将字符放在页面上,因此您不必使用实体。

2

确切地说,它们都不是entity reference&amp;是被定义为一个实体引用,指的是entity named amp

<!ENTITY amp  CDATA "&#38;" -- ampersand, U+0026 ISOnum --> 

在这里你可以看到实体的价值只不过是另一种参考:&#38;

&#x2446;&#9286;“只是” character referencesnumeric character references是精确的),并通过指定的字符在Universal Character Set代码位置,即Unicode字符集是指字符。

+0

你还没有告诉我你的Gravatar来自哪里。我需要开始一个Meta问题吗? :) – 2011-02-27 23:22:56

+0

是什么导致不同计算机上的浏览器以不同方式翻译它们? – coffeemonitor 2011-02-27 23:29:34

+0

@Pekka:我的提示是否更仔细地阅读泰坦尼克号? – Gumbo 2011-02-27 23:30:08