解决 PHP Mysql 和 UTF8的问题

来源:互联网 发布:cacti有数据不出图 编辑:程序博客网 时间:2024/06/05 04:42

http://sixpoint.me/443/solving-php-mysql-utf8-issue/

1. 数据库

  CREATE DATABASE db_name
  CHARACTERSET utf8
  DEFAULTCHARACTERSETutf8
  COLLATE utf8_general_ci
  DEFAULTCOLLATE utf8_general_ci
;

如果数据库已经存在

  ALTER DATABASE sb_name
  CHARACTERSETutf8
  DEFAULTCHARACTERSET utf8
  COLLATE utf8_general_ci
  DEFAULTCOLLATE utf8_general_ci
;

建表

 
  CREATE TABLE table_name(
  ...
  )
  DEFAULT CHARACTER SET utf8
  COLLATE utf8_general_ci
  ;

如果表已经存在

  ALTER TABLE tbl_name
  DEFAULTCHARACTERSET utf8
  COLLATE utf8_general_ci
;

2. 在 php.ini 里面启用

extension=php_mbstring.dll

同时进行如下配置

  mbstring.language = Neutral
  mbstring.internal_encoding = UTF-8
  mbstring.encoding_translation = On
  mbstring.http_input = auto
  mbstring.http_output = UTF-8
  mbstring.detect_order = auto
  mbstring.substitute_character = none
  default_charset = UTF-8

3. 在PHP中使用下面替代的function

mail()                => mb_send_mail()
strlen()              => mb_strlen()  
strpos()              => mb_strpos()
strrpos()             => mb_strrpos()
substr()              => mb_substr()
strtolower()          => mb_strtolower()
strtoupper()          => mb_strtoupper()
substr_count()        => mb_substr_count()
ereg()                => mb_ereg()
eregi()               => mb_eregi()
ereg_replace()        => mb_ereg_replace()
eregi_replace()       => mb_eregi_replace()  
split()               => mb_split()
htmlentities($var)    => htmlentities($var, ENT_QUOTES,'UTF-8')

4. 使用如下的 header 和 meta 标记

  header('Content-type: text/html; charset=UTF-8');
  <metahttp-equiv="Content-type"value="text/html; charset=UTF-8"/>

5. 在向数据库 insert / update 前需要使用

  mysql_set_charset("utf8");或者mysqli_set_charset($link"utf8");(新版)

原创粉丝点击