當前位置:首頁 » 編程語言 » utf8php

utf8php

發布時間: 2025-02-10 02:18:37

『壹』 如何配置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正則表達式如何匹配漢字的全部內容,希望大家喜歡。

熱點內容
odbcforsqlserver 發布:2025-02-10 22:26:37 瀏覽:598
區塊鏈數據存儲在那裡 發布:2025-02-10 22:25:48 瀏覽:687
c語言for死循環 發布:2025-02-10 22:24:08 瀏覽:521
蘋果限制訪問初始密碼 發布:2025-02-10 22:21:31 瀏覽:758
為什麼安卓手機一年後卡頓 發布:2025-02-10 22:15:39 瀏覽:731
職工信息管理系統設計c語言 發布:2025-02-10 22:15:30 瀏覽:118
預演算法的理念 發布:2025-02-10 22:15:25 瀏覽:132
如何結合商圈顧客特點配置貨品 發布:2025-02-10 22:10:59 瀏覽:593
紙幣如何配置財富 發布:2025-02-10 22:00:57 瀏覽:706
資料庫中存放的是視圖的 發布:2025-02-10 21:57:46 瀏覽:628