UTF8下的中文PHP编程

时间:2010-01-16 10:38:18   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:页程式……   很多应用程式的内核都开始使用 Unicode 编码……   目的是显而易见的:支援多语言显示……   微软的所有软体都是 Unicode 内核……   所以日文软体拿到你的中文 XP 上是可以正常显示的……   而中文 98 就会因为 GB 内核安装其他语言软体时造成乱码……     ...
  正文:

前言:
  
  说实话,
  凉鞋也觉得 UTF8 是好东西……
  毕竟同屏显示中日韩对东亚人的吸引力是不小的……
  (当然好处不仅是这点啦……)
  不仅是网页程式……
  很多应用程式的内核都开始使用 Unicode 编码……
  目的是显而易见的:支援多语言显示……
  微软的所有软体都是 Unicode 内核……
  所以日文软体拿到你的中文 XP 上是可以正常显示的……
  而中文 98 就会因为 GB 内核安装其他语言软体时造成乱码……
  
  至于 UTF8 ,
  可以说是 Unicode 的一个分支,
  它用三个字节保存一个汉字……
  (Unicode 用四个字节)
  应用软体都集体投奔 Unicode 了……
  就不允许我们搞网页程式的用 UTF8?
  
  本文中凉鞋就尽量多方位介绍一下 UTF8 编码下的 PHP 编程……
  至于为什么单独介绍“中文”……
  一来是因为英文这玩意实在不需要考虑 UTF8 ……
  除非你准备做多语言系统……
  (我要发些牢骚:现在的老外写程式时根本不重视这个问题……)
  二来是中日韩等多字节语系在 UTF8 编码下的处理方式其实大同小异……
  依葫芦画瓢即可……
  好……先从数据库处理部分开始吧……
  
  
  ==========================================
  连接数据库
  
  很多人刚升级到 mysql 4.1 时会发现数据乱掉了……
  其实是因为 Mysql 从 4.1 开始支援字符集了……
  而且默认字符集正是 UTF8 ……
  (充分证明与国际接轨的重要性…… 嘿嘿……)
  而以前我们大多使用 utf8 或是 GBK 编码……
  这样以来输出的数据当然是乱码……
  要解决乱码……
  就得让程序知道该获取什么编码的数据……
  
  我们假设你以前的数据库是 utf8 编码的……
  那么你可以在查询前添加一句
  
  mysql_query('SET CHARACTER SET utf8') or die("Query failed : " . mysql_error());
  当然,由于 4.1 以上才需要这样处理,
  因此我们可以加上判断:
  
  $mysqlversion = $db->query_first("SELECT VERSION() AS version");
  if ($mysqlversion['version'] >= '4.1')
  {
  mysql_query('SET CHARACTER SET utf8') or die("Query failed : " . mysql_error());
  }
  这样以来不管 Mysql 默认编码是什么都可以正常存取了……
  (不论您是存活期,还是存定期,甚至是零存整取都没有问题鸟……)
  
  但是,人家都国际化鸟……
  您还在用 utf8 行么?
  如何转码呢?
  还有……
  数据升级时出现乱码怎么办?
  凉拌!
  且听下回分解……
  
  ============================================
  数据升级至 4.1
  
  要升级……
  就得先导出……
  要说老外还真不负责……
  以前的导出方式总是弄丢一些中文字符……
  比如把“我爱你娘”弄成“我爱你”啦……
  (通常是丢失一段数据最末尾的字)
  整个儿差了一辈儿……
  (用石榴姐的话说就是“这么大逆不道的事实在是太刺激了”……)
  为了保护您脆弱的心脏……
  也为了维护中国传统伦理道义……
  您可以把数据包含中文字符的字段改为二进制(Binary)编码……
  具体方法嘛……
  可以运行这个语句:
  
  ALTER TABLE `表名` CONVERT TO CHARACTER SET binary;
  这样,那些字符类型字段,如:
  CHAR、VARCHAR 和 TEXT
  将转换为
来源:http://www.002pc.com/master/College/Programming/PHP/11963.html

收藏到:

关于《UTF8下的中文PHP编程》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td