utf8php
『壹』 如何配置php UTF8 編碼 配置文件
要輸出UTF8格式時,加上以下語句:
header(」Content-Type: text/html; charset=UTF-8″)
php用UTF-8總結:
php文件本身必須是UTF-8編碼。不像java會生成class文件,避免這個問題
php要輸出頭:header(」Content-Type: text/html; charset=UTF-8″)
meta標簽無所謂,有header所有瀏覽器就會按header來解析
所有外圍都得用UTF8,包括資料庫、×.js、×.css(CSS影響倒不大)
php本身不是Unicode的,所有substr之類的函數得改成mb_substr(需要裝mbstring擴展);或者用iconv轉碼(基本上的linux都裝了,沒裝的話download、tar、make、make install,很簡單的)
my.ini:
[MySQL(和PHP搭配之最佳組合)]
default-character-set=utf8
[MySQL(和PHP搭配之最佳組合)d]
default-character-set=utf8
default-storage-engine=MyISAM
在[MySQL(和PHP搭配之最佳組合)d]下加入:
default-collation=utf8_bin
init_connect='SET NAMES utf8'
在需要做資料庫操作的php程序前面加上
mb_internal_encoding('utf-8');
create table最後邊加上ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
phpMyAdmin/config.inc.php
$cfg['DefaultCharset'] = 'utf-8';
$cfg['RecodingEngine'] = 'iconv';
phpAdmin導出數據時
把"二進制區域使用十六進制顯示"的勾去掉
特別郁悶的:文件系統函數不支持UTF-8!
『貳』 PHP怎麼把經過UTF-8編碼的中文字元轉換成正常的中文
首先,UTF-8編碼的中文字元也是正常的。
如果你認為 gb2312 才「正常」, 可以這樣:
$utf8_str = '中文'; // 注意這兒得是 UTF-8 編碼的字元串
$gb2312_str = mb_convert_encoding($str, 'GB2312', 'UTF-8');
%E5%90%89%E6%9E%97
有人已經回答了,
用 urldecode 就行了。
『叄』 UTF-8正則表達式如何匹配漢字,utf-8正則表達式_PHP教程
判斷輸入內容是否含有違法字元,請看下面代碼
$str = "編程";
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
echo "您輸入的[".$str."]含有違法字元";
}
else
{
echo "您輸入的[".$str."]完全合法,通過!";
}
-----------------------
UTF-8匹配:在javascript中,要判斷字元串是中文是很簡單的。
比如:
代碼如下:
var str = "php編程";
if (/^[\u4e00-\u9fa5]+$/.test(str))
{
alert("該字元串全部是中文");
}
else
{
alert("該字元串不全部是中文");
}
php中,是用\x表示十六進制數據的。
於是,變換成如下的代碼:
代碼如下:
$str = "php編程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str))
{
print("該字元串全部是中文");
}
else
{
print("該字元串不全部是中文");
}
貌似不報錯了,判斷的結果也正確,不過把$str換成「編程」兩字,結果卻還是顯示「該字元串不全部是中文」,看來這樣的判斷還是不夠准確。
重要:
查閱了《精通正則表達式》發現,對於[\x4e00-\x9fa5]這塊東西,自己做一個強化的解釋php的正則中, [\x4e00-\x9fa5],其實就是 字元和字元組的概念, \x{hex},表達一個16進制數, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必須加上大括弧,同時,如果是大於x{FF}的hex,必須和u 修飾符連用,不然會非法出錯
網上只能找到匹配全形字元的正則: ^[\x80-\xff]*^/ ,這里可以不加大括弧 [\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持 不過,既然\x表示的十六進制數據,為什麼和js里邊提供的范圍\x4e00-\x9fa5不一樣呢?
於是我就換成了下邊的代碼,發現真的准確了:
代碼如下:
$str = "php編程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
print("該字元串全部是中文");
}
else
{
print("該字元串不全部是中文");
}
知道了php中utf-8編碼下用正則表達式匹配漢字的最終正確表達式——/^[\x{4e00}-\x{9fa5}]+$/u, 參考以上文章寫了如下一段測試代碼(復制以下代碼保存成.php文件)
<?php
$action = trim($_GET['action']);
if($action == "sub")
{
$str = $_POST['dir'];
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))
{
echo "您輸入的[".$str."]含有違法字元";
}
else
{
echo "您輸入的[".$str."]完全合法,通過!";
}
}
GBK:
代碼如下:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312漢字字母數字下劃線正則表達式
以上內容就是PHP中UTF-8正則表達式如何匹配漢字的全部內容,希望大家喜歡。