Charset不工作 - 西班牙语字符

时间:2012-11-08 14:21:37

标签: php zend-framework character-encoding

这真让我疯狂。我正在建立一个西班牙语网站(意思是很多拉丁字符),我正在使用Zend框架。

当我保存á时,它显示为á。我知道是一个字符集编码,但我不明白为什么。

我的头像是<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 我的数据库是utf8_general_ci。我已经将charset更改为其他人并且始终存在同样的问题。

当我查看我的数据库时,保存的是á

知道为什么会这样吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这里有摆脱编码问题的方法:

  1. 您的数据库,表格和字段必须使用归类utf8_unicode_ci
  2. 确保您的代码(HTML,PHP ... 所有)采用UTF-8编码。
  3. 始终使用此meta代码:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. 这很长:
  5. 如果您有权访问MySQL文件配置my.cnf,只需添加以下行:

    init-connect='SET NAMES utf8'
    

    这告诉MySQL为每个连接返回UTF-8的结果。

    如果您无法编辑my.cnf但正在使用PDO,请以这种方式打开连接:

    $pdo = new PDO($dsn, $usr, $pwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    

    如果您没有使用PDO ... 启动使用它,您还在等什么?同时,如果使用ext / MySQLi:

    ,则可以在每次连接后执行此操作
    $mysql->set_charset('utf8');
    

    或者如果您使用普通的旧版/ MySQL:

    mysql_set_charset('utf8', $connection);
    

答案 1 :(得分:0)

可以使用á映射ASCII地图外的字符unicode和其他字符。

当你在UTF-8字符集的表格中搜索数据时,字符存储正确。

我建议你

  • 存储数据之前
  • 获取数据之前

运行查询SET NAMES UTF-8。这将获取您的UTF-8数据,并处理ASCII地图之外的字符。

输出数据时,请确保强制/指示浏览器使用UTF-8字符集打印数据。