【问题标题】:Problems with character encodings in LAMP app - UTF-8 or not?LAMP 应用程序中的字符编码问题 - UTF-8 与否?
【发布时间】:2009-11-26 17:26:57
【问题描述】:

我仍在学习 PHP 和 MySQL 的基本知识,我知道我在这里设置字符集的方式有问题,但无法通过阅读此处和网上的内容完全弄清楚我应该做什么.

我有一个使用 PHP 5、MySQL 5 的标准 LAMP 安装。我将所有内容都设置为默认值。当我的一些用户向我们的数据库输入 cmets 时,一些字符显示不正确 - 目前主要是撇号和破折号。在 MySQL 中,撇号显示为 ’。它们也以这种方式显示在页面上(我正在使用 htmlentities 来输出用户 cmets)。

在 phpMyAdmin 中它说我的 MySQL 字符集是 UTF8-Unicode。

在我的数据库中,我的表都设置了默认的 Latin1-Swedish-ci。

我的网页都有 meta http-equiv="Content-Type" content="text/html; charset=utf-8"

当我查看网站的 http 标头时,我看到:Content-Type: text/html

就像一个新手一样,我根本没有考虑过字符集,直到我的某些页面开始看起来很奇怪。那么将所有内容转换为 utf-8 对我来说最有意义吗?这会影响我的 PHP 代码吗?还是我应该试着把它全部变成拉丁语?我是否必须进入数据库并替换这些奇怪的代码,或者一旦我正确设置了字符集,它们会神奇地显示?到目前为止我所做的所有摆弄都没有帮助(我将 http 标头设置为 utf-8,还尝试了拉丁文)。

【问题讨论】:

  • 您桌子上的 Latin1-Swedish-ci-stuff 可能是排序规则。以后我会担心排序规则。
  • 啊!所以这意味着我已经把东西放在了 utf-8 的数据库中,因为 MySQL 被设置为 utf-8?如果是这样,那么我的状态比我想象的要好。我发现切换到 htmlspecialchars 也摆脱了奇怪编码的撇号。
  • 只是跟进,结果我有两个问题。一是字符显示不当。这是通过在我的输出中切换到 htmlspecialchars 解决的。第二,关于 utf-8 似乎如下: MySQL 在我没有意识到的情况下被设置为 utf-8,所以当我通过 web 表单输入文本时,它输入为 utf-8。我还使用 phpMyAdmin 将一些材料粘贴到数据库中,似乎这没有翻译成 utf-8,所以我在数据库中混合了 utf-8 和拉丁字符。我将继续将数据库和站点完全转换为 utf-8。谢谢大家。

标签: php mysql utf-8 character-encoding


【解决方案1】:

如果你真的想了解这些问题,我会从阅读this article at mysql.com 开始。基本上,您希望拼图的每一部分都期待 UTF-8 unicode。在 PHP 方面,您想要执行以下操作:

<?php header("Content-type: text/html; charset=utf-8");?>
<html>
  <head>
     <meta http-equiv="Content-type" value="text/html; charset=utf-8">

当您运行插入查询时,您要确保表的字符编码运行查询的编码都是 UTF-8。您可以通过在运行插入查询之前运行查询 SET NAMES utf8 来完成后者。

【讨论】:

  • 听起来我需要正确地使用 UTF-8,买个戒指,开始谈论孩子......谢谢你的链接 - 我现在正在阅读它。
  • 别担心,一旦你全身心投入,UTF-8 就很容易上手了。
【解决方案2】:

http://www.phpwact.org/php/i18n/charsets

那个网站给了我很多关于如何让所有东西在 UTF-8 中运行良好的好建议。

我还建议从 htmlentities 切换到 htmlspecialchars,因为它对 UTF 更友好。

重点是确保所有内容都使用同一种语言。你的数据库、你的数据库连接、你的 PHP、你的页面都是 utf8 格式(应该有一个元标记和一个这样的标题)。

【讨论】:

  • 是的,切换到 htmlspecialchars 解决了我页面上的输出问题。感谢您的链接!
  • 已接受。这解决了眼前的问题。如果我可以接受两个答案,我也会接受马特布里奇的,因为它对我的问题的第二部分非常有用。
  • 哦,奇怪的是,我们位于同一个城镇。
【解决方案3】:

很抱歉没有完全理解您的问题。但是当问题的一部分是“UTF-8 与否?”时,答案是:“当然是 UTF-8!”

【讨论】:

    【解决方案4】:

    您肯定希望现在而不是以后解决问题。最重要的编程规则之一是不要坚持一个坏主意 - 不要深入挖掘自己!

    由于 latin1 和 utf-8 兼容,您可以将表转换为使用 utf-8,而无需手动操作包含的数据。 MySQL 会为你整理这部分。

    然后检查所有内容是否都在使用 utf-8 很重要。在 apache 中设置 http 标头或使用元标记 - 这告诉浏览器 HTML 输出是 utf-8。

    考虑到这一点,您需要确保您发送的所有数据都是 utf-8 格式!配置您的 IDE 以将 php/html 文件保存为 utf-8。最后确保 PHP 使用 utf-8 连接到 MySQL - 连接后发出此查询:

    SET NAMES 'utf-8';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多