Maison  >  Article  >  développement back-end  >  Fonctions PHP couramment utilisées pour la composition mixte de chaînes en chinois et en anglais

Fonctions PHP couramment utilisées pour la composition mixte de chaînes en chinois et en anglais

怪我咯
怪我咯original
2017-07-04 11:53:041378parcourir

# Détermine si une certaine position est la moitié gauche ou droite d'un caractère chinois, ou non chinois
# Valeur de retour -1 Gauche 0 Pas un caractère chinois 1 Droite
# Utilisation

/*  
$a = 'this is 中文';  
print is_chinese($a, 1); // 0  
print is_chinese($a,8); // -1  
print is_chinese($a,9); // 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 = $ch ? 1: -1;  
}  
else {  
$f_str = false;  
}  
return $f_str;  
}  
# 中文
字符串
倒置函数  
# 如果一个将一个有中文的字符串用
strrev
倒过来,就会产生乱码  
/*  
print cstrrev('this is 中文'); // 文中 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;  
if($chinese == false) {  
$f_str .= $str[$i].$str[$i+1];  
}  
}  
else {  
$f_str .= $str[$i];  
}  
}  
return $f_str;  
}  
/* 中文
字符串截取
函数  
一些中文字符串截取函数经常有一些问题,例如在一些自动换行程序中  
$a=“1中2”;  
经两次截取后,  
c
substr
($str,$a,0,2);  
csubstr($str, $a, 2,2)  
由于载取位置指向“中”的右字节,可能会是这样的结果  
1, 2  
用本函数会产生正确的结果  
1中, 2  
*/  
# start 开始位置,从0开始  
# long = 0 则从start 一直取到字符串尾  
# ltor = true 时从左到右取字符,false 时到右到左取字符  
# $cn_len 中文字符按字节取还是字数取,如果按字数取,则一个中文当一个字节计算  
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<$start; $fs++)  
$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;  
}  
else {  
$fs = (is_chinese($str, $start) == 1) ? $start - 1 : $start;  
$fe = $long + $start - 1;  
$end = ( is_chinese($str, $fe) == -1 ) ? $fe -1 : $fe;  
$long = $end - $fs + 1;  
}  
$f_str = substr($str, $fs, $long);  
if($ltor == false) $f_str = cstrrev($f_str);  
return $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);  
$f_str = cstrrev($f_str);  
return $f_str;  
}  
# 对含有中文字符的文章分行格式化  
# 再也不会发生因换行问题而产生的种种问题啦!!!  
# 注:文章的每一行必须用 n (chr(13))进行分行  
# $width 每行多少字符  
# $br 将 每行用什么字符当结束符  
function ctext_wrap(&$text, $width=60, $br="<BR>") {  
$lines = 
explode
("n",$text);  
$rows = count($lines);  
for($i=0; $i<$rows; $i++) {  
$len = strlen($lines[$i]);  
for($j=0; $j<$len; $j+=$width) {  
$p = $j + $width - 1;  
$k = 0;  
if($p<$len) {  
while(!is_chinese($lines[$i], $p) && $lines[$i][$p] != &#39; &#39; && $p>$j) {  
$k ++;  
$p --;  
}  
if($p == $j) $k = 0;  
}  
$f_str .= csubstr($lines[$i], $j, $width-$k) . $br;  
$j -= $k;  
}  
}  
return $f_str;  
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn