我有一个mysql数据库表来存储国家名称和货币符号 - CHARSET已正确设置为UTF8。
这是插入表
的示例数据insert into country ( country_name, currency_name, currency_code, currency_symbol) values ('UK','Pounds','GBP','£');
当我查看数据库时 - 英镑符号显示正常 - 但是当我从数据库中检索它并将其显示在网站上时 - 一个奇怪的方形符号显示内部带有问号而不是英镑符号。
编辑 在my.cnf中 - characterset设置为latin1 - 我将其更改为utf8 - 然后我以root身份登录并运行\ s - 它返回
Server characterset: utf8 Client characterset: utf8
排序规则
-- Database SELECT default_collation_name FROM information_schema.schemata WHERE schema_name = 'swipe_prod'; THIS DOES NOT RETURN ANYTHING -- Table SELECT table_collation FROM information_schema.tables WHERE TABLE_NAME = 'country'; THIS RETURNS utf8_general_ci -- Columns SELECT collation_name FROM information_schema.columns WHERE TABLE_NAME = 'country'; THIS RETURNS 7 ROWS but all have either null or utf8_general_ci
PHP代码
<?php $con = mysql_connect("localhost","user","123456"); mysql_select_db("swipe_db", $con); $result = mysql_query("SELECT * FROM country where country_name='UK'"); while($row = mysql_fetch_array($result)) { echo $row['country_name'] . " " . $row['currency_symbol']; } mysql_close($con); ?>
请指教 感谢
答案 0 :(得分:7)
当您看到“带有问号的奇怪方形符号”(也称为REPLACEMENT CHARACTER)时,通常指示您有一个80-FF(128-255)范围内的字节,系统正在尝试以UTF-8呈现它。
整个字节范围对于UTF-8中的单字节字符无效,但在ISO-8859-1等西方编码中非常常见。
当我查看您的页面并手动将字符编码从UTF-8切换到ISO-8859-1时(在Firefox中使用View
&gt;&gt; Character Encoding
&gt;&gt; {{1}然后POUND SIGN正确显示。
那么,那有什么不对?很难说 - 有几十个地方可以被犯规。但最有可能的是它在数据库级别。将表上的CHARSET设置为UTF8通常是不够的。在角色正确地在系统中移动之前,您的所有字符集和排序规则都必须按顺序排列。一个常见的陷阱是connection charsets设置不当,所以我从那里开始。
如果您需要更多指导,请与我们联系。
要检查该值实际存储的字节数,请运行此查询。
Western (ISO-8859-1)
如果您看到SELECT hex( currency_symbol )
FROM country
WHERE country_name = 'UK'
,那么您就知道该字符存储为ISO-8859-1。这意味着在写入DB期间或之前会出现问题。
如果您看到A3
,那么您就知道该字符存储为UTF-8。这意味着在从DB读取之后和写入浏览器之前会出现问题。
C2A3
答案 1 :(得分:3)
我的2便士切碎。我使用utf8_encode()从数据库输出数据。这似乎也照顾其他角色。
答案 2 :(得分:1)
尝试使用
£
代替£符号,替代地,在打印£符号的地方,执行:
<%=replace(stringWithPoundInIt,"£","£"%>
答案 3 :(得分:1)
我遇到了同样的问题。我做的是在连接到数据库(PHP)之后立即运行它:
mysql_query("SET NAMES utf8");
希望这会有所帮助..
答案 4 :(得分:1)
我遇到了同样的问题,我在MySQL数据库上运行SELECT查询之前添加了以下PHP代码解决了这个问题。
mysql_query("SET character_set_results=utf8", $link);
答案 5 :(得分:1)
我自己遇到了这个问题,并在输出阶段使用“mb_convert_encoding”解决了。
使用你的例子......
echo $row['country_name'] . " " . mb_convert_encoding($row['currency_symbol'], "UTF-8");
答案 6 :(得分:0)
你可以查看here。我不确定它是否有效但试一试,因为这很奇怪我以前从未见过这样的东西。