php教程 字符串編碼轉換的常用幾種方法
mb_convert_encoding()
PHP的內碼轉換函數
版本(PHP 4 >= 4.0.6, PHP 5)
這個函數可以將各種編碼互相轉換
做一個GBK To UTF-8
< ?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("你是我的友仔", "UTF-8", "GBK");
?>
再來個GB2312 To Big5
< ?php
header("content-Type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");
?>
iconv()
php內碼轉換函數,同上
因為iconv()在轉換gb2312時的bug,所以要這樣處理
PHP codeiconv( "UTF-8", "gb2312//IGNORE" , $str)
ignore的意思是忽略轉換時的錯誤,發現iconv在轉換字符"—"到gb2312時會出錯,如果沒有
ignore參數,所有該字符後面的字符串都無法被保存。
另外mb_convert_encoding沒有這個bug,所以最好的寫法是:
PHP codemb_convert_encoding($str,"gb2312", "UTF-8");
但是需要先enable mbstring 擴展庫。
也可以把mysql教程數據庫教程的collation設成utf-8就不用作轉換了
三句mysql真言
SQL code
SET NAMES utf8;
SET CHARACTER SET utf8;
SET COLLATION_CONNECTION='utf8_general_ci';
自定函數1
--------------------------------------------------------------------------------
---
網上找的轉換函數,將GB2312進行轉換的,修改為utf-8後轉換錯誤,無法解析中文.....期待正
則狂人...
PHP code<?php
function escape($str) {
preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(ord($v[0]) < 128)
$ar[$k] = rawurlencode($v);
else
$ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v));
}
return join("",$ar);
}
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|.+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u" && strlen($v) == 6)
$ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4)));
}
return join("",$ar);
}
?>
自定函數2
--------------------------------------------------------------------------------
---
感謝論壇gingzai777 ,高手就是不一樣,一眼就能看出問題所在.....
以後php過濾用這個行了,不需要顧慮文件編碼了.....
PHP code<?php
function addslashes_str($str){
$str=addslashes($str);
$str=str_replace($str,";",';');
return $str;
}
function strips教程lashes_str($str){
$str=stripslashes($str);
$str=str_replace($str,';',";");
return $str;
}
?>