Vorgehensweise 1: PHP-Methode zum Abfangen chinesischer Zeichenfolgen.
Da beim Abfangen chinesischer Zeichenfolgen auf der Homepage der Website und vTigerCRM häufig verstümmelte Zeichen auftreten (mithilfe von Substr), habe ich heute eine bessere Methode zum Abfangen chinesischer Zeichenfolgen gefunden und möchte sie mit Ihnen teilen .
Funktion msubstr($str, $start, $len) {
$tmpstr = "";
$strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2);
$i++;
} anders
$tmpstr .= substr($str, $i, 1);
}
return $tmpstr;
}
Programm 2: PHP fängt UTF-8-String ab und löst das Halbzeichenproblem
/*********************************** **** *******************************
* PHP fängt UTF-8-Strings ab, um das Halbzeichenproblem zu lösen.
* Englisch und Zahlen (halbe Breite) sind 1 Byte (8 Bits), Chinesisch (volle Breite) sind 3 Bytes
* @return Die herausgenommene Zeichenfolge. Wenn $len kleiner oder gleich 0 ist, wird die gesamte Zeichenfolge zurückgegeben
* @param $str Quellzeichenfolge
* $len ist die Länge des Teilstrings auf der linken Seite
************************************************** *******************/
Funktion utf_substr($str,$len)
{
for($i=0;$i<$len;$i++)
{
$temp_str=substr($str,0,1);
if(ord($temp_str) > 127)
{
$i++;
if($i<$len)
{
$new_str[]=substr($str,0,3);
$str=substr($str,3);
}
}
anders
{
$new_str[]=substr($str,0,1);
$str=substr($str,1);
}
}
return join($new_str);
}
?>
PHP UTF-8 String Interception
<?
Funktion cutstr($string, $length) {
preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef ][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80 -xbf][x80-xbf][x80-xbf]/", $string, $info);
for($i=0; $i<count($info[0]); $i++) {
$wordscut .= $info[0][$i];
$j = ord($info[0][$i]) > 127 ? $j + 2 : $j + 1;
if ($j > $length - 3) {
return $wordscut." ...";
}
}
return join('', $info[0]);
}
$string="242432 Opposition wird 456 auf der breiten Botschaftslokal 7890 begangen";
for($i=0;$i<strlen($string);$i++)
{
echo cutstr($string,$i)."<br>";
}
?>
Abfangen der UTF-8-String-Funktion
Um mehrere Sprachen zu unterstützen, kann die Zeichenfolge in der Datenbank als UTF-8-Kodierung gespeichert werden. Bei der Website-Entwicklung müssen Sie möglicherweise PHP verwenden, um einen Teil der Zeichenfolge abzufangen. Um verstümmelte Zeichen zu vermeiden, schreiben Sie die folgende UTF-8-String-Interception-Funktion. Informationen
zum Prinzip von UTF-8 finden Sie unter
UTF-8-codierte Zeichen können aus 1 bis 3 Bytes bestehen bestimmt durch die erste beurteilt durch bytes. (Theoretisch könnte es länger sein, aber hier gehen wir von nicht mehr als 3 Bytes aus)
Wenn das erste Byte größer als 224 ist, bilden es und die 2 Bytes danach ein UTF-8-Zeichen. Wenn das erste Byte größer als 192 und kleiner als 224 ist, bilden es und das 1 Byte danach ein UTF-8-Zeichen. Zeichen Ansonsten ist das erste Byte selbst ein englisches Zeichen (einschließlich Zahlen und einer kleinen Menge Satzzeichen).
Code, der zuvor für eine Website entwickelt wurde (auch die Längenabfangfunktion, die derzeit auf der Homepage verwendet wird)
Code:
<?php // Cut_Str;
//$sourcestr ist die zu verarbeitende Zeichenfolge
//$cutlength ist die Länge des Abfangens (d. h. die Anzahl der Wörter)
Funktion cut_str($sourcestr,$cutlength)
{
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr);//Die Anzahl der Bytes in der Zeichenfolge
while (($n<$cutlength) und ($i<=$str_length))
{
$temp_str=substr($sourcestr,$i,1);
$ascnum=Ord($temp_str);//Erhalten Sie den ASCII-Code des $i-ten Zeichens in der Zeichenfolge
if ($ascnum>=224) //Wenn das ASCII-Bit hoch ist und 224,
{
$returnstr=$returnstr.substr($sourcestr,$i,3); //Gemäß der UTF-8-Kodierungsspezifikation werden 3 aufeinanderfolgende Zeichen als ein einzelnes Zeichen gezählt
$i=$i+3; //Das tatsächliche Byte wird als 3 gezählt
$n++; //Stringlänge zählt als 1
}
elseif ($ascnum>=192) //Wenn das ASCII-Bit hoch ist und 192,
{
$returnstr=$returnstr.substr($sourcestr,$i,2); //Gemäß der UTF-8-Kodierungsspezifikation werden 2 aufeinanderfolgende Zeichen als ein einzelnes Zeichen gezählt
$i=$i+2; //Das tatsächliche Byte wird als 2 gezählt
$n++; //Stringlänge zählt als 1
}
elseif ($ascnum>=65 && $ascnum<=90) //Wenn es ein Großbuchstabe ist,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //Die tatsächliche Anzahl der Bytes zählt immer noch 1
$n++; //Aber wenn man das Gesamterscheinungsbild betrachtet, werden Großbuchstaben als ein High-Bit-Zeichen gezählt
}
else //In anderen Fällen Kleinbuchstaben und Satzzeichen halber Breite einschließen,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //Die tatsächliche Byteanzahl ist 1
$n=$n+0.5; //Kleinbuchstaben und Satzzeichen halber Breite sind halb so breit wie höherwertige Zeichen...
}
}
if ($str_length>$cutlength){
$returnstr = $returnstr . "...";//Fügen Sie am Ende Auslassungspunkte hinzu, wenn die Länge überschritten wird
}
return $returnstr;
}
Intercept utf-8 string function
function FSubstr($title,$start,$len="",$magic=true)
{
/**
* betrieben von Smartpig
* mailto:[email protected]
*/
if($len == "") $len=strlen($title);
if($start != 0)
{
$startv = ord(substr($title,$start,1));
if($startv >= 128)
{
if($startv < 192)
{
for($i=$start-1;$i>0;$i--)
{
$tempv = ord(substr($title,$i,1));
if($tempv >= 192) break;
}
$start = $i;
}
}
}
if(strlen($title)<=$len) return substr($title,$start,$len);
$alen = 0;
$blen = 0;
$realnum = 0;
for($i=$start;$i<strlen($title);$i++)
{
$ctype = 0;
$cstep = 0;
$cur = substr($title,$i,1);
if($cur == "&")
{
if(substr($title,$i,4) == "<")
{
$cstep = 4;
$länge += 4;
$i += 3;
$realnum++;
if($magic)
{
$alen++;
}
}
sonst if(substr($title,$i,4) == ">")
{
$cstep = 4;
$länge += 4;
$i += 3;
$realnum++;
if($magic)
{
$alen++;
}
}
sonst if(substr($title,$i,5) == "&")
{
$cstep = 5;
$Länge += 5;
$i += 4;
$realnum++;
if($magic)
{
$alen++;
}
}
sonst if(substr($title,$i,6) == """)
{
$cstep = 6;
$länge += 6;
$i += 5;
$realnum++;
if($magic)
{
$alen++;
}
}
else if(preg_match("/&#(d+);?/i",substr($title,$i,8),$match))
{
$cstep = strlen($match[0]);
$length += strlen($match[0]);
$i += strlen($match[0])-1;
$realnum++;
if($magic)
{
$blen++;
$ctype = 1;
}
}
}anders{
if(ord($cur)>=252)
{
$cstep = 6;
$länge += 6;
$i += 5;
$realnum++;
if($magic)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=248){
$cstep = 5;
$Länge += 5;
$i += 4;
$realnum++;
if($magic)
{
$ctype = 1;
$blen++;
}
}elseif(ord($cur)>=240){
$cstep = 4;
$länge += 4;
$i += 3;
$realnum++;
if($magic)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=224){
$cstep = 3;
$länge += 3;
$i += 2;
$realnum++;
if($magic)
{
$ctype = 1;
$blen++;
}
}elseif(ord($cur)>=192){
$cstep = 2;
$länge += 2;
$i += 1;
$realnum++;
if($magic)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=128){
$länge += 1;
}anders{
$cstep = 1;
$länge +=1;
$realnum++;
if($magic)
{
if(ord($cur) >= 65 && ord($cur) <= 90)
{
$blen++;
}anders{
$alen++;
}
}
}
}
if($magic)
{
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$length -= $cstep;
brechen;
}anders{
brechen;
}
}
}anders{
if($realnum == $len) break;
}
}
unset($cur);
unset($alen);
unset($blen);
unset($realnum);
unset($ctype);
unset($cstep);
return substr($title,$start,$length);
}