解æphpå¼åä¸çä¸æç¼ç é®é¢_phpæå·§
ç°å¨å¤§é¨åå ·æå½é åç¹å¾çè½¯ä»¶æ ¸å¿å符å¤çé½æ¯ä»¥ Unicode 为åºç¡çï¼å¨è½¯ä»¶è¿è¡æ¶æ ¹æ®å½æ¶çocale/Lang/Codepage 设置确å®ç¸åºçæ¬å°å符ç¼ç 设置ï¼å¹¶ä¾æ¤å¤çæ¬å°å符ãå¨å¤çè¿ç¨ä¸éè¦å®ç° Unicode åæ¬å°å符éçç¸äºè½¬æ¢ï¼çæ以 Unicode 为ä¸é´ç两个ä¸åæ¬å°å符éçç¸äºè½¬æ¢ãè¿ç§æ¹å¼å¨ç½ç»ç¯å¢ä¸è¢«è¿ä¸æ¥å»¶ä¼¸ï¼ä»»ä½ç½ç»ä¸¤ç«¯çå符信æ¯ä¹éè¦æ ¹æ®å符éç设置转æ¢æå¯æ¥åçå 容ã
æ°æ®åºä¸çå符éç¼ç é®é¢
æµè¡çå
³ç³»æ°æ®åºç³»ç»é½æ¯ææ°æ®åºå符éç¼ç ï¼ä¹å°±æ¯è¯´å¨å建æ°æ®åºæ¶å¯ä»¥æå®å®èªå·±çå符é设置ï¼æ°æ®åºçæ°æ®ä»¥æå®çç¼ç å½¢å¼åå¨ãå½åºç¨ç¨åºè®¿é®æ°æ®æ¶ï¼å¨å
¥å£ååºå£å¤é½ä¼æå符éç¼ç ç转æ¢ã对äºä¸ææ°æ®ï¼æ°æ®åºå符ç¼ç ç设置åºå½ä¿è¯æ°æ®çå®æ´æ§ãGB2312ãGBKãUTF-8 çé½æ¯å¯éçæ°æ®åºå符éç¼ç ;å½ç¶æ们ä¹å¯ä»¥éæ© ISO8859-1 (8-bit)ï¼åªæ¯æ们å¾å¨åº
ç¨ç¨åºåæ°æ®ä¹åå å° 16Bit çä¸ä¸ªæ±åæ Unicode æåæ两个 8-bit çå符ï¼è¯»æ°æ®ä¹åä¹éè¦å°ä¸¤ä¸ªåèå并起æ¥ï¼åæ¶è¿è¦å¤å«å ¶ä¸ç SBCS å符ï¼å æ¤æ们并ä¸æ¨èéç¨ ISO8859-1 ä½ä¸ºæ°æ®åºå符éç¼ç ãè¿æ ·ä¸ä½æ²¡æå åå©ç¨æ°æ®åºèªèº«çå符éç¼ç æ¯æï¼èä¸åæ¶ä¹å¢å äºç¼ç¨çå¤æ度ãç¼ç¨æ¶ï¼å¯ä»¥å ç¨æ°æ®åºç®¡çç³»ç»æä¾ç管çåè½æ£æ¥å ¶ä¸çä¸ææ°æ®æ¯å¦æ£ç¡®ã
PHP ç¨åºå¨æ¥è¯¢æ°æ®åºä¹åï¼é¦å æ§è¡ mysql_query("SET NAMES xxxx"); å ¶ä¸ xxxx æ¯ä½ ç½é¡µçç¼ç (charset=xxxx)ï¼å¦æç½é¡µä¸ charset=utf8ï¼å xxxx=utf8ï¼å¦æç½é¡µä¸ charset=gb2312ï¼åxxxx=gb2312ï¼å ä¹ææ WEB ç¨åºï¼é½æä¸æ®µè¿æ¥æ°æ®åºçå ¬å ±ä»£ç ï¼æ¾å¨ä¸ä¸ªæ件éï¼å¨è¿æ件éï¼å å ¥ mysql_query("SET NAMES xxxx") å°±å¯ä»¥äºã
SET NAMES æ¾ç¤ºå®¢æ·ç«¯åéç SQL è¯å¥ä¸ä½¿ç¨ä»ä¹å符éãå æ¤ï¼SET NAMES 'utf-8' è¯å¥åè¯æå¡å¨âå°æ¥ä»è¿ä¸ªå®¢æ·ç«¯ä¼ æ¥çä¿¡æ¯éç¨å符é utf-8âãå®è¿ä¸ºæå¡å¨åéå客æ·ç«¯çç»ææå®äºå符é(ä¾å¦ï¼å¦æä½ ä½¿ç¨ä¸ä¸ª SELECT è¯å¥ï¼å®è¡¨ç¤ºåå¼ä½¿ç¨äºä»ä¹å符é)ã
å®ä½é®é¢æ¶å¸¸ç¨çæå·§
å®ä½ä¸æç¼ç é®é¢é常éç¨æ笨çä¹æ¯æææçåæ³âå¨ä½ 认为æå«ççç¨åºå¤çåæå°å符串çå
ç ãéè¿æå°å符串çå
ç ï¼ä½ å¯ä»¥åç°ä»ä¹æ¶åä¸æå符被转æ¢æ Unicodeï¼ä»ä¹æ¶åUnicode 被转åä¸æå
ç ï¼ä»ä¹æ¶åä¸ä¸ªä¸æåæäºä¸¤ä¸ª Unicode å符ï¼ä»ä¹æ¶åä¸æå符串被转æäºä¸ä¸²é®å·ï¼ä»ä¹æ¶åä¸æå符串çé«ä½è¢«æªæäºâ¦â¦
åç¨åéçæ ·æ¬å符串ä¹æå©äºåºåé®é¢çç±»åãå¦ï¼"aaå aa?@aa" çä¸è±ç¸é´ï¼GBãGBKç¹å¾å符åæçå符串ãä¸è¬æ¥è¯´ï¼è±æå符æ 论æä¹è½¬æ¢æå¤çï¼é½ä¸ä¼å¤±ç(å¦æéå°äºï¼å¯ä»¥å°è¯çå¢å è¿ç»çè±æåæ¯é¿åº¦)ã
解å³åç§åºç¨çä¹±ç é®é¢
1) 使ç¨æ ç¾è®¾ç½®é¡µé¢ç¼ç
è¿ä¸ªæ ç¾çä½ç¨æ¯å£°æ客æ·ç«¯çæµè§å¨ç¨ä»ä¹å符éç¼ç æ¾ç¤ºè¯¥é¡µé¢ï¼xxx å¯ä»¥ä¸º GB2312ãGBKãUTF-8(å MySQL ä¸åï¼MySQL æ¯ UTF8)ççãå æ¤ï¼å¤§é¨å页é¢å¯ä»¥éç¨è¿ç§æ¹å¼æ¥åè¯æµè§å¨æ¾ç¤ºè¿ä¸ªé¡µé¢çæ¶åéç¨ä»ä¹ç¼ç ï¼è¿æ ·æä¸ä¼é æç¼ç é误è产çä¹±ç ãä½æ¯æçæ¶åæ们ä¼åç°æäºè¿å¥è¿æ¯ä¸è¡ï¼ä¸ç®¡ xxx æ¯åªä¸ç§ï¼æµè§å¨éç¨çå§ç»é½æ¯ä¸ç§ç¼ç ï¼è¿ä¸ªæ
åµæåé¢ä¼è°å°ã
请注ææ¯å±äº HTML ä¿¡æ¯çï¼ä» ä» æ¯ä¸ä¸ªå£°æï¼ä» 表ææå¡å¨å·²ç»æ HTML ä¿¡æ¯ä¼ å°äºæµè§å¨ã
2) header("content-type:text/html; charset=xxx");
è¿ä¸ªå½æ° header() çä½ç¨æ¯ææ¬å·éé¢çä¿¡æ¯åå° http æ 头ãå¦ææ¬å·éé¢çå
容为æä¸æ说é£æ ·ï¼é£ä½ç¨å æ ç¾åºæ¬ç¸åï¼å¤§å®¶å¯¹ç
§ç¬¬ä¸ä¸ªçåç°å符é½å·®ä¸å¤çãä½æ¯ä¸åçæ¯å¦ææè¿æ®µå½æ°ï¼æµè§å¨å°±ä¼æ°¸è¿éç¨ä½ æè¦æ±ç xxx ç¼ç ï¼ç»å¯¹ä¸ä¼ä¸å¬è¯ï¼å æ¤è¿ä¸ªå½æ°æ¯å¾æç¨çã为ä»ä¹ä¼è¿æ ·å¢?é£å°±å¾è¯´è¯´ http æ 头å HTMLä¿¡æ¯çå·®å«äºï¼
http æ 头æ¯æå¡å¨ä»¥ http åè®®ä¼ é HTML ä¿¡æ¯å°æµè§å¨åæéåºçå串ãè æ ç¾æ¯å±äº HTML ä¿¡æ¯çï¼æ以 header() åéçå 容å å°è¾¾æµè§å¨ï¼éä¿ç¹å°±æ¯ header() çä¼å 级é«äº (ä¸ç¥éå¯ä¸å¯ä»¥è¿æ ·è®²)ãåå¦ä¸ä¸ª php 页é¢æ¢æheader("content-type:text/html;charset=xxx")ï¼åæï¼æµè§å¨å°±åªè®¤åè http æ 头èä¸è®¤ meta äºãå½ç¶è¿ä¸ªå½æ°åªè½å¨ php 页é¢å 使ç¨ã
åæ ·ä¹çæä¸ä¸ªé®é¢ï¼ä¸ºä»ä¹åè å°±ç»å¯¹èµ·ä½ç¨ï¼èåè ææ¶åå°±ä¸è¡å¢?è¿å°±æ¯æ¥ä¸æ¥è¦è°çApache çåå äºã
3) AddDefaultCharset
Apache æ ¹ç®å½ç conf æ件夹éï¼ææ´ä¸ª Apache çé
ç½®ææ¡£ httpd.confã
ç¨ææ¬ç¼è¾å¨æå¼ httpd.confï¼ç¬¬ 708 è¡(ä¸åçæ¬å¯è½ä¸å)æ AddDefaultCharset xxxï¼xxx为ç¼ç å称ãè¿è¡ä»£ç çææï¼è®¾ç½®æ´ä¸ªæå¡å¨å çç½é¡µæ件 http æ 头éçå符éä¸ºä½ é»è®¤ç xxxå符éãæè¿è¡ï¼å°±ç¸å½äºç»æ¯ä¸ªæ件é½å äºä¸è¡ header("content-type:text/html; charset=xxx")ãè¿ä¸å°±æç½ä¸ºä»ä¹ææ设置äºæ¯ utf-8ï¼å¯æµè§å¨å§ç»éç¨ gb2312 çåå ã
å¦æç½é¡µéæ header("content-type:text/html; charset=xxx")ï¼å°±æé»è®¤çå符éæ¹ä¸ºä½ 设置çå符éï¼æ以è¿ä¸ªå½æ°æ°¸è¿æç¨ãå¦ææ AddDefaultCharset xxx åé¢å 个"#"ï¼æ³¨éæè¿å¥ï¼èä¸é¡µé¢éä¸å« header("content-typeâ¦")ï¼é£è¿ä¸ªæ¶åå°±è½®å° meta æ ç¾èµ·ä½ç¨äºã
ä¸é¢ååºä»¥ä¸çä¼å
顺åºï¼
.. header("content-type:text/html; charset=xxx")
.. AddDefaultCharset xxx
..
å¦æä½ æ¯ web ç¨åºåï¼å»ºè®®ç»ä½ çæ¯ä¸ªé¡µé¢é½å 个header("content-type:text/html;charset=xxx")ï¼è¿æ ·å°±å¯ä»¥ä¿è¯å®å¨ä»»ä½æå¡å¨é½è½æ£ç¡®æ¾ç¤ºï¼å¯ç§»æ¤æ§ä¹æ¯è¾å¼ºã
4) php.ini ä¸ç default_charset é
ç½®ï¼
php.ini ä¸ç default_charset = "gb2312" å®ä¹äº php çé»è®¤è¯è¨å符éãä¸è¬æ¨è注éææ¤è¡ï¼è®©æµè§å¨æ ¹æ®ç½é¡µå¤´ä¸ç charset æ¥èªå¨éæ©è¯è¨èéåä¸ä¸ªå¼ºå¶æ§çè§å®ï¼è¿æ ·å°±å¯ä»¥å¨åå°æå¡å¨ä¸æä¾å¤ç§è¯è¨çç½é¡µæå¡ã
ç»æè¯
å
¶å®phpå¼åä¸çä¸æç¼ç 并没ææ³åçé£ä¹å¤æï¼è½ç¶å®ä½å解å³é®é¢æ²¡æå®è§ï¼åç§è¿è¡ç¯å¢ä¹åä¸å°½ç¶ï¼ä½åé¢çåçæ¯ä¸æ ·çãäºè§£å符éçç¥è¯æ¯è§£å³å符é®é¢çåºç¡ãä¸è¿ï¼éçä¸æå符éçååï¼ä¸ä»
ä»
æ¯ php ç¼ç¨ï¼ä¸æä¿¡æ¯å¤çä¸çé®é¢è¿æ¯ä¼åå¨ä¸æ®µæ¶é´çã