ホームページ >バックエンド開発 >PHPチュートリアル >PHP で文字列を処理するためによく使用される関数 中国語と英語の混合植字_PHP チュートリアル
# 特定の位置が漢字の左半分か右半分であるか、中国語ではないかを判断します
# 戻り値 -1 左 0 漢字ではありません 1 右
# 使用法
/*
$a = 'これは中国語です';
print is_chinese ($a, 1); // 0
print is_chinese($a,8) // -1
*/
function is_chinese(&$str) , $location ) {
$ch = true;
$i = $location;
while(ord($str[$i])>0xa0 && $i >= 0) {
$ch = !$ch;
$i --;
if($i != $location) {
$f_str ? 1: -1;
else {
$f_str = false; ;
}
# 中国語文字列反転関数
# strrev を使用して中国語文字を含む文字列を反転すると文字化けが発生します
/*
print cstrrev('this is Chinese') // 文中に si siht
* /
function cstrrev(&$str) {
$long = strlen($str);
for($f_str='', $chinese=false, $i=$long-1; $i>=0 ; $ i--) {
if(ord($str[$i]) > 0xa0) {
$chinese = ! $chinese;
$f_str .= $str[ $i ].$str[$i+1];
}
}
else {
$f_str .= $str[$i];
}
}
return $f_str;
/*
一部の自動行折り返しプログラムなど、一部の中国語の文字列インターセプト関数では、問題が発生することがよくあります。
$a="1 in 2";
csubstr($str,$a,0,2); ($str, $a, 2,2)
読み込み位置が「middle」の右バイトを指しているので、結果は次のようになります
1, 2
この関数を使用すると正しい結果が得られます
1m, 2
*/
# 開始位置を 0 から開始します
# long = 0、文字列の先頭から末尾までをフェッチします
# ltor = true、文字を左から右にフェッチ、false、文字を右から左にフェッチします
# $ cn_len 漢字をバイト数または単語数で取得する場合は、漢字1文字を1バイトとして計算します
function csubstr(&$str, $start=0, $ long=0, $ltor=true, $cn_len =2) {
if($long == 0) $long = strlen($str)
if($ltor == false) $str = cstrrev($str); ;
if($cn_len == 1) {
for($i=0, $fs=0; $i$i += (ord($str[$fs]) <= 0xa0) ? 1 : 0.5;
for($i=0, $fe=$fs; $i<$long; $fe++)
$i += (ord($str[$fe]) < = 0xa0) ? 1 : 0.5;
$long = $fe - $fs;
$fs = (is_chinese($str, $start) == 1) ? ;
$fe = $long + $start - 1;
$end = (is_chinese($str, $fe) == -1 ) : $fe; 1;
}
$f_str($str, $fs, $long);
if($ltor == false) $f_str = cstrrev($f_str);左側の文字列を取得します
# cn_len == 2 の場合 $long が左に何単語を取るか、その逆の場合
function cleft(&$str, $long, $cn_len=2) {
$f_str = csubstr($str , 0, $long, true, $cn_len);
return $f_str;
}
# 正しい文字列を取得する
function cright(&$str, $long, $cn_len=2) {
$f_str = cstrrev($) str);
$f_str = csubstr ($f_str, 0, $long, true, $cn_len);
return $f_str;
# 中国語の文字を含む記事を書式設定します
# もう二度と起こらない 改行による様々な問題! ! !
# 注: 記事の各行は n (chr(13)) で分岐する必要があります
# $width 1 行あたりの文字数
# $br 各行の終了文字として使用する文字
function ctext_wrap( &$text, $ width=60, $br="
") {
$lines =explode("n",$text);
for($i) =0; $i<$rows; $i++) {
$len = strlen($lines[$i]);
for($jif($p<$len) {
while(!is_chinese($lines[$i], $p) && $lines[$i][ $p] != ' ' && $p>$j) {
$k ++;
$p --;
if($p == $j) $k = 0; = csubstr($lines [$i], $j, $width-$k) . $br;
$j -= $k;
$f_str;
http://www.bkjia.com/PHPjc/318178.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/318178.html
技術記事