『壹』 php中 提取中文字元首個拼音字母
$fchar = ord($s0{0}); //獲取字元串的第一個位元組
//判斷是不是英文字元,如果是則直接返回該字母大寫
if ($fchar >= ord(「A」) and $fchar <= ord(「z」))return strtoupper($s0{0});
//以下代碼用字元編碼轉換函數,通過兩種字元集編碼轉換的對比,判斷字元串是哪種字元集
//最終取字元串為GB字元集
$s1 = @iconv(「UTF-8″, 「GBK」, $s0);
$s2 = @iconv(「GBK」, 「UTF-8″, $s1);
if ($s2 == $s0) {
$s = $s1;
} else {
$s = $s0;
}
//計算給出的字元串的前兩個位元組內碼,然後再根據結果判斷在GB字元集中的位置,從而根據位置與拼音的關系,最終得出拼音字母
$asc = ord($s{0}) * 256 + ord($s{1}) – 65536;
『U』、『V』對中文無效,以下是對H 拼音的計算:
if($asc>=-17922 and $asc<=-17418)return "H";
『貳』 php如何輸出中文json格式字元串
php如何輸出中文json格式字元串
如何對json格式的字元串進行轉換,php提供了兩個函數:
json_encode 對變數進行 JSON 編碼
json_decode 對 JSON 格式的字元串進行編碼
下面看個實例:
$arr = ['a', 'b', 'c'];echo json_encode($arr);
輸出為:
["a","b","c"]
但是,當我們在數組中放入中文的時候,就會出現問題:
$arr = [ '世界', '你好',
];echo json_encode($arr);
輸出的結果為:
["\u4e16\u754c","\u4f60\u597d"]
這個結果顯然不是我們想要的,但是為什麼出現這個呢?
因為當我們的值中包含中文時,php對他進行json編碼時底層會對中文進行unicode編碼,導致結果不可讀,那該怎麼解決呢?
方法一
可以利用 urlencode 和 urldecode 方法繞過這個轉碼為 unicode 的過程,先將中文欄位進行urlencode,然後json_encode,最後再用urldecode處理結果,便可以正常顯示中文。具體代碼如下:
$arr = [ '世界', '你好',
];echo urldecode(json_encode(array_map('urlencode', $arr)));
輸出結果為:
["世界","你好"]
方法二
自PHP5.4版本,官方就已經給Json新增了一個選項: JSON_UNESCAPED_UNICODE。加上這個選項後,就不會自動把中文編碼了。具體代碼如下:
$arr = [ '世界', '你好',
];echo json_encode($arr, JSON_UNESCAPED_UNICODE);
["世界","你好"]
看吧,這才是我們想要的結果 :)
『叄』 php關於截取中文字元串的問題
php中文亂碼的原因及解決方法
原因:1.php頁面語言本身的編碼類型不合適,這時候,你直接在腳本中寫的中文肯定是亂碼,不用說資料庫了;
解決方法:選擇'utf8'或者'薯鄭gb2312',這樣客戶瀏覽器會自動選擇並出現正確的中文顯示。注意:'utf8'或者'gb2312'都可以正確顯示中文的。
2.資料庫mysql中的編碼類型不正確。
解決方法:創建資料庫的時候,mysql
字元集選擇'utf8',mysql
連接校對選擇utf8_general_ci,這樣創建的資料庫用來存儲中文肯定沒有問題,
否則,你的中文首先在mysql中就是亂碼,更不要期望它會給你在php頁面中顯示正確。
3.與平時的腳本編輯握辯環境有關。比如,有些內容是自己用word寫的,有些是用記事本寫的,有些用editplus、ultraplus等文本編輯器。有時候就直接在dw中寫中文了,
這樣做不出亂碼才怪呢。
解決方法:盡量用同一種編輯器。如果是拷貝來得既有的內容,建議用ultraplus中的編碼轉換功能把它轉換成utf8或者gb2312。
到底轉換成什麼類型並不重要,關鍵要求你的php
web應用程序中的編碼要一致就行。
4.編程訪問
mysql時,建議添加段手缺一行代碼:mysql_query("set
names
'gbk'");
這是解決方法
我沒看懂你貼上來的程序
所以給你一些方法去解決亂碼的問題
希望可以幫得上
『肆』 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正則表達式如何匹配漢字的全部內容,希望大家喜歡。
『伍』 php字元串查找位置 php字元串查找
在PHP中查找字元串的位置或判斷字元串是否存在的方法如下:
使用strpos()函數查找字元串位置:
判斷字元串中是否包含另一個字元串:
使用strrpos()函數查找字元串最後一次出現的位置:
使用strstr()函數判斷子串是否存在:
注意事項:
以上方法提供了在PHP中查找字元串位置或判斷字元串是否存在的多種方式,根據具體需求選擇合適的方法即可。