Home  >  Article  >  Backend Development  >  Commonly used functions for processing strings in PHP Chinese and English mixed typesetting_PHP tutorial

Commonly used functions for processing strings in PHP Chinese and English mixed typesetting_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:56:001638browse

# 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;
}


# Chinese string inversion function
# If a string with Chinese characters is reversed using strrev, garbled code will be generated
/*
print cstrrev('this is Chinese'); // In the text 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;
}
/* Chinese string interception function
Some Chinese string interception functions often have some problems, such as in some automatic line wrapping programs
$a="1 in 2";
After intercepting twice,
csubstr($str,$a, 0,2);
csubstr($str, $a, 2,2)
Since the loading position points to the right byte of "middle", the result may be like this
1, 2
Using this function will produce the correct result
1, 2
*/
# start starting position, starting from 0
# long = 0, then take from start to the end of the string
# When ltor = true, characters are taken from left to right, when false, characters are taken from right to left.
# $cn_len Chinese characters are taken by byte or number of words. If they are taken by word number, one Chinese character is counted as one byte.

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 ; bytes
function cleft(&$str, $long, $cn_len=2) {
$f_str = csubstr($str, 0, $long, true, $cn_len);
return $f_str ;
}

# Get the right string
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;
}
# Pairs containing Chinese characters Format articles in separate lines
# No more problems caused by line breaks! ! !
# Note: Each line of the article must be separated by n (chr(13))
# $width How many characters per line
# $br What character should be used as the end character for each line

function ctext_wrap(&$text, $width=60, $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] != ' ' && $p>$j) {
$k ++;
$p --;
}
if($p == $j) $k = 0;
}
$f_str .= csubstr($lines[$i], $j, $width-$k) . $br;
$j -= $k;
}
}
return $f_str;
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/318178.htmlTechArticle# Determine whether a certain position is the left or right half of a Chinese character, or not Chinese #Return value -1 left 0 is not a Chinese character 1 right #Usage/* $a='thisis Chinese'; printis_chinese($a,1);//0 printis_c...
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