Procedimento 1: Método PHP de interceptação de strings chinesas
Como caracteres ilegíveis (usando substr) geralmente aparecem ao interceptar strings chinesas na página inicial do site e no vTigerCRM, hoje encontrei um método melhor de interceptar strings chinesas e gostaria de compartilhá-lo com vocês. .
função 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);
$eu++;
} outro
$tmpstr .= substr($str, $i, 1);
}
retornar $tmpstr;
}
Programa 2: PHP intercepta string UTF-8 e resolve o problema de meio caractere
/********************************** *************************************
* PHP intercepta strings UTF-8 para resolver o problema de meio caractere.
* Inglês e números (meia largura) têm 1 byte (8 bits), chinês (largura total) têm 3 bytes
* @return A string retirada, quando $len for menor ou igual a 0, a string inteira será retornada
* @param $str string de origem
* $len é o comprimento da substring à esquerda
************************************************** *******************/
função utf_substr($str,$len)
{
for($i=0;$i<$len;$i++)
{
$temp_str=substr($str,0,1);
if(ord($temp_str) > 127)
{
$eu++;
if($i<$len)
{
$new_str[]=substr($str,0,3);
$str=substr($str,3);
}
}
outro
{
$new_str[]=substr($str,0,1);
$str=substr($str,1);
}
}
retornar juntar($new_str);
}
?>
interceptação de string php utf-8
<?
function cortarstr($string, $comprimento) {
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 = ordem($info[0][$i]) > 127 ?
if ($j > $comprimento - 3) {
retorne $palavrascut." ...";
}
}
return join('', $info[0]);
}
$string="242432 A oposição está 456 comprometida na ampla embaixada local 7890";
for($i=0;$i<strlen($string);$i++)
{
echo cutstr($string,$i)."<br>";
}
?>
Função de interceptação de string UTF-8
Para suportar vários idiomas, a string no banco de dados pode ser salva como codificação UTF-8. No desenvolvimento de sites, pode ser necessário usar PHP para interceptar parte da string. Para evitar caracteres ilegíveis, escreva a seguinte função de interceptação de string UTF-8.
Para o princípio do UTF-8, consulte as Perguntas frequentes sobre UTF-8.
Os caracteres codificados em UTF-8 podem consistir em 1 a 3 bytes. determinado pelo primeiro julgado por bytes. (Teoricamente poderia ser mais longo, mas aqui assumimos não mais que 3 bytes)
Se o primeiro byte for maior que 224, ele e os 2 bytes seguintes formarão um caractere UTF-8. Se o primeiro byte for maior que 192 e menor que 224, ele e o 1 byte seguinte formarão um caractere UTF-8. Caractere Caso contrário, o primeiro byte em si é um caractere inglês (incluindo números e uma pequena quantidade de pontuação).
Código previamente projetado para um site (também a função de interceptação de comprimento usada atualmente na página inicial)
Código:
<?php // Cut_Str;
//$sourcestr é a string a ser processada
//$cutlength é o comprimento da interceptação (ou seja, o número de palavras)
função cut_str($sourcestr,$cutlength)
{
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr);//O número de bytes na string
enquanto (($n<$cutlength) e ($i<=$str_length))
{
$temp_str=substr($fontestr,$i,1);
$ascnum=Ord($temp_str);//Obtém o código ascii do $i-ésimo caractere na string
if ($ascnum>=224) //Se o bit ASCII for alto e 224,
{
$returnstr=$returnstr.substr($sourcestr,$i,3); //De acordo com a especificação de codificação UTF-8, 3 caracteres consecutivos são contados como um único caractere
$i=$i+3; //O byte real é contado como 3
$n++; //O comprimento da string conta como 1
}
elseif ($ascnum>=192) //Se o bit ASCII for alto e 192,
{
$returnstr=$returnstr.substr($sourcestr,$i,2); //De acordo com a especificação de codificação UTF-8, 2 caracteres consecutivos são contados como um único caractere
$i=$i+2; //O byte real é contado como 2
$n++; //O comprimento da string conta como 1
}
elseif ($ascnum>=65 && $ascnum<=90) //Se for uma letra maiúscula,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //O número real de Bytes ainda conta como 1
$n++; //Mas considerando a aparência geral, letras maiúsculas são contadas como um caractere de bit alto
}
else //Em outros casos, inclua letras minúsculas e sinais de pontuação de meia largura,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //A contagem real de bytes é 1
$n=$n+0.5; //Letras minúsculas e sinais de pontuação de meia largura têm metade da largura dos caracteres de ordem alta...
}
}
if ($str_length>$cortecomprimento){
$returnstr = $returnstr "...";//Adiciona reticências no final quando o comprimento exceder
}
return $returnstr;
}
Interceptar função de string utf-8
função FSubstr($title,$start,$len="",$magic=true)
{
/**
* alimentado por Smartpig
* mailto:[email protected]
*/
if($len == "") $len=strlen($título);
if($iniciar!= 0)
{
$startv = ord(substr($título,$start,1));
if($startv >= 128)
{
if($startv < 192)
{
for($i=$início-1;$i>0;$i--)
{
$tempv = ord(substr($título,$i,1));
if($tempv >= 192) pausa;
}
$início = $i;
}
}
}
if(strlen($título)<=$len) return substr($título,$start,$len);
$alen = 0;
$blen = 0;
$num real = 0;
for($i=$início;$i<strlen($título);$i++)
{
$ctype = 0;
$cstep = 0;
$cur = substr($título,$i,1);
if($cur == "&")
{
if(substr($título,$i,4) == "<")
{
$cstep = 4;
$comprimento += 4;
$eu += 3;
$num real++;
if($mágica)
{
$alen++;
}
}
senão if(substr($título,$i,4) == ">")
{
$cstep = 4;
$comprimento += 4;
$eu += 3;
$num real++;
if($mágica)
{
$alen++;
}
}
senão if(substr($título,$i,5) == "&")
{
$cstep = 5;
$comprimento += 5;
$eu += 4;
$num real++;
if($mágica)
{
$alen++;
}
}
senão if(substr($título,$i,6) == """)
{
$cstep = 6;
$comprimento += 6;
$eu += 5;
$num real++;
if($mágica)
{
$alen++;
}
}
senão if(preg_match("/&#(d+);?/i",substr($title,$i,8),$match))
{
$cstep = strlen($match[0]);
$comprimento += strlen($correspondência[0]);
$i += strlen($correspondência[0])-1;
$num real++;
if($mágica)
{
$blen++;
$ctype = 1;
}
}
}outro{
if(ord($cur)>=252)
{
$cstep = 6;
$comprimento += 6;
$eu += 5;
$num real++;
if($mágica)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=248){
$cstep = 5;
$comprimento += 5;
$eu += 4;
$num real++;
if($mágica)
{
$ctype = 1;
$blen++;
}
}elseif(ord($cur)>=240){
$cstep = 4;
$comprimento += 4;
$eu += 3;
$num real++;
if($mágica)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=224){
$cstep = 3;
$comprimento += 3;
$eu += 2;
$num real++;
if($mágica)
{
$ctype = 1;
$blen++;
}
}elseif(ord($cur)>=192){
$cstep = 2;
$comprimento += 2;
$eu += 1;
$num real++;
if($mágica)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=128){
$comprimento += 1;
}outro{
$cstep = 1;
$comprimento +=1;
$num real++;
if($mágica)
{
if(ord($cur) >= 65 && ord($cur) <= 90)
{
$blen++;
}outro{
$alen++;
}
}
}
}
if($mágica)
{
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$comprimento -= $cstep;
quebrar;
}outro{
quebrar;
}
}
}outro{
if($num real == $len) break;
}
}
não definido($cur);
não definido($alen);
não definido($blen);
não definido($num real);
não definido($ctype);
não definido($cstep);
return substr($título,$início,$comprimento);
}