«
UTF8下的中文PHP编程

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  前言:</p><p>  说实话,</p>凉鞋也觉得 UTF8 是好东西……</p>毕竟同屏显示中日韩对东亚人的吸引力是不小的……</p>(当然好处不仅是这点啦……)</p>不仅是网页程式……</p>很多应用程式的内核都开始使用 Unicode 编码……</p>目的是显而易见的:支援多语言显示……</p>微软的所有软体都是 Unicode 内核……</p>所以日文软体拿到你的中文 XP 上是可以正常显示的……</p>而中文 98 就会因为 GB 内核安装其他语言软体时造成乱码……</p><p>  至于 UTF8 ,</p>可以说是 Unicode 的一个分支,</p>它用三个字节保存一个汉字……</p>(Unicode 用四个字节)</p>应用软体都集体投奔 Unicode 了……</p>就不允许我们搞网页程式的用 UTF8?</p><p>  本文中凉鞋就尽量多方位介绍一下 UTF8 编码下的 PHP 编程……</p>至于为什么单独介绍“中文”……</p>一来是因为英文这玩意实在不需要考虑 UTF8 ……</p>除非你准备做多语言系统……</p>(我要发些牢骚:现在的老外写程式时根本不重视这个问题……)</p>二来是中日韩等多字节语系在 UTF8 编码下的处理方式其实大同小异……</p>依葫芦画瓢即可……</p>好……先从数据库处理部分开始吧……</p>==========================================</p>连接数据库</p><p>  很多人刚升级到 Mysql 4.1 时会发现数据乱掉了……</p>其实是因为 Mysql 从 4.1 开始支援字符集了……</p>而且默认字符集正是 UTF8 ……</p>(充分证明与国际接轨的重要性…… 嘿嘿……)</p>
<p> </p>

   而以前我们大多使用 utf8 或是 GBK 编码……</p>这样以来输出的数据当然是乱码……</p>要解决乱码……</p>就得让程序知道该获取什么编码的数据……</p><p>  我们假设你以前的数据库是 utf8 编码的……</p>那么你可以在查询前添加一句</p><code>mysql_query('SET CHARACTER SET utf8') or die("Query failed : " . mysql_error());</code></p>当然,由于 4.1 以上才需要这样处理,</p>因此我们可以加上判断:</p><code>$mysqlversion = $db->query_first("SELECT VERSION() AS version");<br />if ($mysqlversion['version'] >= '4.1')<br />{<br />mysql_query('SET CHARACTER SET utf8') or die("Query failed : " . mysql_error());<br />}</code></p>这样以来不管 Mysql 默认编码是什么都可以正常存取了……</p>(不论您是存活期,还是存定期,甚至是零存整取都没有问题鸟……)</p><p>  但是,人家都国际化鸟……</p>您还在用 utf8 行么?</p>如何转码呢?</p>还有……</p>数据升级时出现乱码怎么办?</p>凉拌!</p>且听下回分解……</p><p>  ============================================</p>数据升级至 4.1</p><p>  要升级……</p>就得先导出……</p>要说老外还真不负责……</p>以前的导出方式总是弄丢一些中文字符……</p>比如把“我爱你娘”弄成“我爱你”啦……</p>(通常是丢失一段数据最末尾的字)</p>整个儿差了一辈儿……</p>(用石榴姐的话说就是“这么大逆不道的事实在是太刺激了”……)</p>
 <p> </p>

   为了保护您脆弱的心脏……</p>也为了维护中国传统伦理道义……</p>您可以把数据包含中文字符的字段改为二进制(Binary)编码……</p>具体方法嘛……</p>可以运行这个语句:</p><p>  ALTER TABLE `表名` CONVERT TO CHARACTER SET binary;</p>这样,那些字符类型字段,如:</p>CHAR、VARCHAR 和 TEXT</p>将转换为</p>BINARY、VARBINARY 和 BLOB</p>然后再导出并导入到 4.1 环境中……</p>当然,最后一项繁琐的工作是:</p>你需要把它们的类型再改回来……</p><p>  有往 4.1 升级的……</p>当然也有往下降级的……</p>怎么降级???</p>凉鞋去上个厕所……</p>而您请翻下页……</p><p>  =============================================</p>数据从 4.1 降级</p><p>  有人发现从4.1导出的 SQL 文件无法导入低版本程序……</p>问题其实很简单……</p>而且 Mysql 已经为我们想好了一切……</p>导出时请添加