【问题标题】:Internationalize content best practices for using utf8_encode() (php function)使用 utf8_encode()(php 函数)的国际化内容最佳实践
【发布时间】:2011-11-14 07:54:12
【问题描述】:

为了让网站接受用户提交的可能不是英文(例如日文)的内容并将其保存到数据库中,对所有新内容进行 utf8_encode 并在稍后检索时用户 utf8_decode 是否符合我的最佳利益?

更多信息: 我正在使用学说,但在尝试将 Unicode 字符保存或选择到 MySQL 数据库时出现错误:

SQLSTATE[HY000]:一般错误:1267 非法混合排序规则 (latin1_swedish_ci,IMPLICIT) 和 (utf8_general_ci,COERCIBLE) 用于操作 '='

【问题讨论】:

  • 请在其中包含您的表架构。并且可以提供完整的 sql 吗?
  • 需要更多信息:您的表格使用什么排序规则?
  • UTF-8 all the way through的可能重复

标签: mysql utf-8 doctrine mysql-error-1267


【解决方案1】:

您不需要使用编码功能。您需要做的是确保您是端到端的 UTF8。看起来您的数据库可能正在使用 latin1 编码和排序规则。您与数据库的连接也需要是 UTF8。有时这只是在建立连接后立即执行 SET NAMES UTF8 查询的问题。

在 mysql 中运行此命令可能会解决您在上面看到的错误,但您仍然需要端到端 UTF8。那么你就不需要对你的数据做任何特别的事情了。

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

【讨论】:

    【解决方案2】:

    布伦特是对的。它需要端到端。这是我的清单:

    Apache config:
        AddDefaultCharset UTF-8
        AddCharset UTF-8  .utf8
    
    php.ini:
        default_charset = "utf-8"
    
    MySQL:
        ALTER DATABASE DEFAULT CHARACTER SET utf8;
        ALTER TABLE SomeTableName DEFAULT CHARACTER SET utf8;
    
    PHP/HTML:
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        …
        <form … <input type="text" name="some_field" value="<?php echo htmlspecialchars($row['some_field'], ENT_COMPAT, 'UTF-8'); ?>"…
    
    This last one seems the most important. Call this function immediately after the mysql_connect() call:
        mysql_query("SET NAMES 'utf8'");
    

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2010-12-17
      相关资源
      最近更新 更多