Home  >  Article  >  Backend Development  >  PHP functions commonly used for mixed Chinese and English typesetting of strings

PHP functions commonly used for mixed Chinese and English typesetting of strings

怪我咯
怪我咯Original
2017-07-04 11:53:041319browse

# Determine whether a certain position is the left or right half of a Chinese character, or not Chinese
# Return value -1 Left 0 Not a Chinese character 1 Right
# Usage

/*  
$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;  
}

The above is the detailed content of PHP functions commonly used for mixed Chinese and English typesetting of strings. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn