代码之家  ›  专栏  ›  技术社区  ›  Don

PHP和MySQL中的字符编码

  •  1
  • Don  · 技术社区  · 15 年前

    我们的网站开发的元标签设置为。。。

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    

    这对M-dash和特殊引号等很好。但是,当数据被输入到一个在MySQL中存储数据的CMS组件时,我有一个问题。MySQL排序规则被设置为UTF8_瑞典语_ci(我读到这是可以的,当它在phpMySqlAdmin中设置时一定是默认的)。

    utf8编码,所以我通过uft8_decode()php函数运行它们。我以为这样可以解决不兼容的问题,但我得到的不是我所期望的。

    当我在文本字段中查看数据库中的数据(再次通过phpMySqlAdmin)时,它看起来像这样。。。

    当我在屏幕上看到它时,它看起来像。。。

    我知道我可以尝试在数据库或文本中找到/替换其中的一堆,但我希望有一种更简单的方法可以用编程的方式来实现。

    谢谢, 唐


    更新:

    我有这样一个文件:weve(special')。我的MySQL排序规则是“latin1_swedish_ci”(默认值)。如果我将头或元更改为iso/utf,则其中一个中断。W/utf-8这个()是一个黑色的钻石,但是db的含量很好。使用iso,内联内容是可以的,但是来自db的内容有各种字符和其他字符。尝试将MySQL排序规则更改为utf-8,但没有发现差异。

    我正打算手动更改这些项目。谢谢你的其他建议。

    3 回复  |  直到 15 年前
        1
  •  1
  •   DisgruntledGoat    15 年前

    如果数据库中的数据是UTF8,则需要在连接到MySQL后运行此查询:

    SET NAMES UTF8
    
        2
  •  1
  •   Mark Basmayor    15 年前

    • 确保内容类型头已由 服务器。这可以通过使用header函数在php中完成。

      header('Content-Type:text/html;charset=iso-8859-1');

    • 在HTML文件中设置元标记。

      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

    有关更多读数,请参阅:

    http://www.joelonsoftware.com/articles/Unicode.html

    http://www.webstandards.org/learn/articles/askw3c/dec2002/

        3
  •  0
  •   Magnus Nordlander    15 年前

    我的猜测是,尽管有meta标记,web服务器还是会发送一个将字符集设置为UTF-8的头。然而,解决这些问题的最简单方法通常是将非ASCII字符转义为HTML实体。