现场未显示欧元符号
Posted
技术标签:
【中文标题】现场未显示欧元符号【英文标题】:Euro sign not showing on site 【发布时间】:2011-10-12 05:46:42 【问题描述】:我的一个字段(这是一个 latin1_swedish_ci)似乎在字段内部的 phpMYADMIN 中显示欧元符号很好。
但是,当我尝试以表单的形式在网站的输入字段中回显它时,它在 Firefox 中显示为问号。
这里是 html/php:
$sql = mysql_query("select * from `settings`");
while ($row = mysql_fetch_assoc($sql))
$setting[$row['field']] = htmlspecialchars($row['value'], ENT_QUOTES);
<input type="text" name="currency_symbol" id="currency_symbol" size="50" value="<?php echo $setting['currency_symbol']; ?>" />
我在页面上使用以下元标记:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
我已尝试将 utf8_general_ci 用于该字段,但得到相同的结果。
【问题讨论】:
【参考方案1】:如果您以 UTF-8 格式提供页面,则需要确保在将字符串放入页面之前以 UTF-8 编码从数据库中获取字符串。你可以这样做:
mysql_set_charset('utf8');
(如果您这样做,也可以将实际表数据存储为 UTF-8,例如 utf8_general_ci
,而不是 latin1_swedish_ci
,因此您可以正确处理基本拉丁语之外的字符-1 套。)
【讨论】:
这在我的情况下有效,而 htmlentities() 和 htmlspecialchars() 没有 这应该可以解决实际问题,并且比避免使用 htmlentities() 的问题要好。【参考方案2】:尝试将 MySQL charset 更改为 UTF-8 或瑞典语。
Here这是一个小例子。
【讨论】:
【参考方案3】:尝试使用htmlentities()
而不是htmlspecialchars()
。
特殊字符不会转换所有内容,只是一些选定的字符。欧元符号€,真的需要编码,&euro;
。
【讨论】:
-1 当字符集支持时,欧元符号当然不需要转换为实体。事实上,在使用 Unicode 时,您几乎不需要htmlentities
而不是 htmlspecialchars
。
@Michael Madsen:取决于您是否为文档正确设置了语言和字符代码。 Firefox 确实倾向于显示问号,特别是对于动态插入的内容,除非实体编码。
@Michael Madsen:此外,很少有人从 PHP 输出为 Unicode,所以这样的东西会被破坏。 PHP 仍然不能自动处理,所以在实践中很少这样做。
如果您没有正确设置这些东西,那么您的流程就会被破坏,并且 htmlentities 是围绕实际问题的丑陋黑客 - 即您没有正确设置这些东西。我已经使用 UTF-8 和 PHP 多年了,而且没有一次需要 htmlentities。
@Michael Madsen:取决于您要遵守的标准,如果您仍然使用 HTML4,那么这是正确的程序。 XHTML 向上,实体是一种高度兼容的处理情况的方式,一些阅读器,如文本阅读器,有时仍然会弄乱 UTF8。不争论这是一种明智的方法,只是说旧方法没有“错误”。以上是关于现场未显示欧元符号的主要内容,如果未能解决你的问题,请参考以下文章