php漢字匹配
⑴ 如何解決php中文亂碼問題
PHP中文亂碼主要是編碼不對,存在以下兩種情況,你以此檢查一下 ,改對編碼就行了
1、 php文件本身的編碼與網頁的編碼應匹配
a. 如果欲使用gb2312編碼,那麼php要輸出頭:header(「Content-Type: text/html; charset=gb2312"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的編碼格式為ANSI,可用記事本打開,另存為選擇編碼為ANSI,覆蓋源文件。
b. 如果欲使用utf-8編碼,那麼php要輸出頭 :header(「Content-Type: text/html; charset=utf-8"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的編碼格式為utf-8。保存為utf-8可能會有點麻煩,一般utf-8文件開頭會有BOM,如果使用 session就會出問題,可用editplus來保存,在editplus中,工具->參數選擇->文件->UTF-8簽名,選擇總 是刪除,再保存就可以去掉BOM信息了。
2. php本身不是Unicode的,所有substr之類的函數得改成mb_substr(需要裝mbstring擴展);或者用iconv轉碼。
⑵ 怎麼用php正則獲得a標簽內的文字啊
php中正則匹配只要使用這兩個函數:
preg_match_all
preg_match
這里使用preg_match_all,代碼如下:
$subject='<ahref="xxx.php">abc測試</a>';//假設這是需要匹配的字元串
$pattern='/<ahref="[^"]*"[^>]*>(.*)</a>/';//這是匹配的正則表達式
preg_match_all($pattern,$subject,$matches);//開始匹配,該函數會把匹配結果放入$matches數組中
echo"<pre>";
print_r($matches);
/**
結果是:
Array
(
[0]=>Array
(
[0]=>abc測試
)
[1]=>Array
(
[0]=>abc測試
)
)
*/
⑶ 求PHP 的正則表達式 大全
匹配中文字元的正則表達式: [\u4e00-\u9fa5] 評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了 匹配雙位元組字元(包括漢字在內):[^\x00-\xff] 評註:可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1) 匹配空白行的正則表達式:\n\s*\r 評註:可以用來刪除空白行 匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? /> 評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於復雜的嵌套標記依舊無能為 匹配首尾空白字元的正則表達式:^\s*|\s*$ 評註:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表達式 匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 評註:表單驗證時很實用 匹配網址URL的正則表達式:[a-zA-z]+://[^\s]* 評註:網上流傳的版本功能很有限,上面這個基本可以滿足需求 匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 評註:表單驗證時很實用 匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7} 評註:匹配形式如 0511-4405222 或 021-87888822 匹配騰訊QQ號:[1-9][0-9]{4,} 評註:騰訊QQ號從10000開始 匹配中國郵政編碼:[1-9]\d{5}(?!\d) 評註:中國郵政編碼為6位數字 匹配身份證:\d{15}|\d{18} 評註:中國的身份證為15位或18位 匹配ip地址:\d+\.\d+\.\d+\.\d+ 評註:提取ip地址時有用 匹配特定數字: ^[1-9]\d*$ //匹配正整數 ^-[1-9]\d*$ //匹配負整數 ^-?[1-9]\d*$ //匹配整數 ^[1-9]\d*|0$ //匹配非負整數(正整數 + 0) ^-[1-9]\d*|0$ //匹配非正整數(負整數 + 0) ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點數 ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負浮點數 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點數 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負浮點數(正浮點數 + 0) ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數 + 0) 評註:處理大量數據時有用,具體應用時注意修正 匹配特定字元串: ^[A-Za-z]+$ //匹配由26個英文字母組成的字元串 ^[A-Z]+$ //匹配由26個英文字母的大寫組成的字元串 ^[a-z]+$ //匹配由26個英文字母的小寫組成的字元串 ^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字元串 ^\w+$ //匹配由數字、26個英文字母或者下劃線組成的字元串 /http:\/\/(.*)\//i //匹配外部鏈接地址
滿意請採納
⑷ 求一個PHP正則表達式匹配(字母、數字、漢字、下劃線)
<?php
$pat='#^([a-zA-Z]+|[0-9]+|[x{4e00}-x{9fa5}]+)$#u';
$s="你好";
var_mp(preg_match($pat,$s));
⑸ PHP正則匹配漢字和半形逗號,開頭和結尾禁止半形逗號、禁止連續兩個半形逗號。自己沒知道OK的,就不要答了
匹配漢字其實與編碼有關系的,UTF8的正則與GBK的正則就會有差別。
我按你的要求改了一個在UTF-8編碼下匹配的,但還沒達到禁止連續兩個半形逗號的要求。你可以先看看,看看有沒有啟發。
$str = "漢,中國,人,字";
if (preg_match("/^[^,][\x{4e00}-\x{9fa5},]+[^,]$/u",$str)) {
print("合法");
} else {
print("不合法");
}
============
如果未能解決兩個半形逗號的問題,其他樓主也可以降低一下要求,分兩次處理。第一次先替換掉雙半解逗號為一個,再使用正則來匹配。
能解決問題是關鍵,方法可以再優化,對不?
⑹ php匹配中文文字,並給字元串的中文文字加粗
剛才參數寫錯了,現在應該可以了
<?php
$str = "中文123美麗abc開心。?我們";
$len=strlen($str);
for ($i=0;$i<$len;$i++)
{
if(ord(substr($str,$i, 1))>127)
{
$temp=substr($str, $i,2);
//輸出粗體字,具體忘了,你可以查一下
echo "對";
$i++;
}
else
echo substr($str, $i,1);
}
?>
⑺ 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正則表達式如何匹配漢字的全部內容,希望大家喜歡。