【问题标题】:Convert different encode charset to UTF-8将不同的编码字符集转换为 UTF-8
【发布时间】:2012-10-24 20:15:42
【问题描述】:

我在客户数据库中有这样的词(同样情况下还有 40 多个):

  1. Aclimação
  2. Aclima&ccedilão

我需要将两者都转换为 UTF-8 并保存在 MySQL 数据库中:Aclimação。

我如何用 PHP 做到这一点?

[编辑]
观察:
我需要这样做,因为当用户找到特定的“地区”时,它不可能转换成两种格式,例如:

  1. Aclimaç&aatilde;o (correct)
  2. Aclimação (incorrect: utf8 + html number encode)
  3. Aclima&ccedilão (incorrect: iso + html number encode)

我只需要一种编码类型,在我的例子中:ISO-8859-1。

【问题讨论】:

  • 在数据库排序规则中将编码类型设置为 UTF8 utf8_general_ci
  • 我不能这样做,因为数据库中的所有单词都是 ISO-8859-1。我需要转换这个词,因为有 2 种类型的转换(ã 而不是 &aatilde),而且很难找到。
  • 通常html_entity_decode() 可以。但这看起来是一次半编码。因此,您可能需要自定义替换映射和函数和/或正则表达式。

标签: php mysql


【解决方案1】:

在将html_entity_decode() 应用于字符串后,获取值并将它们插入到数据库中。

(您提供的第二个字符串看起来像是一个格式错误的 HTML 实体,对吗?)

【讨论】:

  • 是的,但是,这是我客户的数据库,我需要转换为“正确格式”。如何?当然,我不知道...我正在测试很多功能...
  • @PatrickMaciel 如果它是一个表,或者只是几个表,您可以选择所有字段并使用已通过适当过滤器的适当字符串更新它们。并确保您的表排序规则是 utf8__。或者你可以使用eis的程序。
【解决方案2】:
  1. 使用 mysqldump 转储数据库内容
  2. iconv 将数据转换为 UTF8
  3. 字符串替换格式错误的 html 实体是有效的
  4. 使用 html_entity_decode 将有效的 html 实体更改为应有的字符。注意你应该给它编码(UTF-8)作为参数,否则它将取决于PHP版本!
  5. 在 mysql 中创建新的 UTF-8 数据库
  6. 将数据导入mysql

我认为例如 ã 不存在于 ISO-8859-1 中,因此您确实需要 UTF-8。 &aatilde; 是不正确的,这是 HTML 的表示方式。

【讨论】:

    【解决方案3】:

    以下解决方案是如何使用函数转换数据库中的所有数据的:

    mb_convert_encoding (data, 'UTF-8', 'HTML-ENTITIES');
    

    当我阅读记录时,请执行以下操作:

    utf8_decode (data)
    

    当我查找一些记录时,根据站点的选择(),我执行以下操作:

    utf8_encode (data)
    

    到目前为止,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2011-12-08
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多