Maison développement back-end tutoriel php 真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )_php技巧

真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )_php技巧

May 17, 2016 am 09:08 AM
utf8 截取字符串

复制代码 代码如下:

/*
* 功能: 作用跟substr一样,除了它不会造成乱码
* 参数:
* 返回:
*/
function utf8_substr( $str , $start , $length=null ){
// 先正常截取一遍.
$res = substr( $str , $start , $length );
$strlen = strlen( $str );
/* 接着判断头尾各6字节是否完整(不残缺) */
// 如果参数start是正数
if ( $start >= 0 ){
// 往前再截取大约6字节
$next_start = $start + $length; // 初始位置
$next_len = $next_start + 6 $next_segm = substr( $str , $next_start , $next_len );
// 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节
$prev_start = $start - 6 > 0 ? $start - 6 : 0;
$prev_segm = substr( $str , $prev_start , $start - $prev_start );
}
// start是负数
else{
// 往前再截取大约6字节
$next_start = $strlen + $start + $length; // 初始位置
$next_len = $next_start + 6 $next_segm = substr( $str , $next_start , $next_len );
// 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节.
$start = $strlen + $start;
$prev_start = $start - 6 > 0 ? $start - 6 : 0;
$prev_segm = substr( $str , $prev_start , $start - $prev_start );
}
// 判断前6字节是否符合utf8规则
if ( preg_match( '@^([\x80-\xBF]{0,5})[\xC0-\xFD]?@' , $next_segm , $bytes ) ){
if ( !empty( $bytes[1] ) ){
$bytes = $bytes[1];
$res .= $bytes;
}
}
// 判断后6字节是否符合utf8规则
$ord0 = ord( $res[0] );
if ( 128 = $ord0 ){
// 往后截取 , 并加在res的前面.
if ( preg_match( '@[\xC0-\xFD][\x80-\xBF]{0,5}$@' , $prev_segm , $bytes ) ){
if ( !empty( $bytes[0] ) ){
$bytes = $bytes[0];
$res = $bytes . $res;
}
}
}
return $res;
}

测试数据::
复制代码 代码如下:

$str = 'dfjdjf测13f试65&2数据fdj(1就mfe&……就';
var_dump( utf8_substr( $str , 22 , 12 ) ); echo '
';
var_dump( utf8_substr( $str , 22 , -6 ) ); echo '
';
var_dump( utf8_substr( $str , 9 , 12 ) ); echo '
';
var_dump( utf8_substr( $str , 19 , 12 ) ); echo '
';
var_dump( utf8_substr( $str , 28 , -6 ) ); echo '
';

显示结果::(截取无乱码, 欢迎大家测试, 提交bug)
string(12) "据fdj"
string(26) "据fdj(1就mfe&…"
string(13) "13f试65&2数"
string(12) "数据fd"
string(20) "dj(1就mfe&…"
Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Combien d'octets les caractères chinois codés en utf8 occupent-ils ? Combien d'octets les caractères chinois codés en utf8 occupent-ils ? Feb 21, 2023 am 11:40 AM

Les caractères chinois codés en UTF8 occupent 3 octets. En codage UTF-8, un caractère chinois équivaut à trois octets et un signe de ponctuation chinois occupe trois octets, tandis qu'en codage Unicode, un caractère chinois (y compris le chinois traditionnel) équivaut à deux octets. UTF-8 utilise 1 à 4 octets pour coder chaque caractère. Un caractère US-ASCIl n'a besoin que de 1 octet pour coder. Le latin, le grec, le cyrillique, l'arménien et l'hébreu avec des signes diacritiques, l'arabe, le syriaque et d'autres lettres nécessitent 2 octets. codage.

Comment intercepter une chaîne en langage Go Comment intercepter une chaîne en langage Go Mar 13, 2024 am 08:33 AM

Le langage Go est un langage de programmation puissant et flexible qui fournit de riches fonctions de traitement de chaînes, notamment l'interception de chaînes. Dans le langage Go, nous pouvons utiliser des tranches pour intercepter des chaînes. Ensuite, nous présenterons en détail comment intercepter des chaînes en langage Go, avec des exemples de code spécifiques. 1. Utilisez le découpage pour intercepter une chaîne. Dans le langage Go, vous pouvez utiliser des expressions de découpage pour intercepter une partie d'une chaîne. La syntaxe de l'expression slice est la suivante : slice:=str[start:end]where, s

Comment intercepter une chaîne en langage Go Comment intercepter une chaîne en langage Go Jan 12, 2023 pm 04:02 PM

Méthode d'interception : 1. Intercepter un seul caractère, la syntaxe « string[index] », où « string » représente la chaîne source, et « index » représente l'indice de caractère à obtenir 2. Intercepter une sous-chaîne, la syntaxe « string » ; [start: end" ]", où "start" représente l'index du premier caractère à intercepter (y compris ce caractère lors de l'interception), "end" représente l'index du dernier caractère à intercepter (hors ce caractère) ; . Récupère la chaîne entière, syntaxe "string[:]".

Comment utiliser la fonction LEFT dans MySQL pour intercepter la partie gauche d'une chaîne Comment utiliser la fonction LEFT dans MySQL pour intercepter la partie gauche d'une chaîne Jul 12, 2023 pm 01:37 PM

Comment utiliser la fonction LEFT dans MySQL pour intercepter la partie gauche d'une chaîne. Dans les systèmes de gestion de bases de données, nous rencontrons souvent des situations où nous devons intercepter une certaine partie d'une chaîne. MySQL fournit de nombreuses fonctions de chaîne intégrées, notamment la fonction LEFT, qui peut être utilisée pour intercepter la partie gauche d'une chaîne. La syntaxe de la fonction LEFT est la suivante : LEFT (str, length) où str est la chaîne à intercepter et length est la longueur à intercepter. Ensuite, nous utiliserons des exemples de code pour démontrer comment

Que faire si les caractères chinois du nœud utf8 sont tronqués Que faire si les caractères chinois du nœud utf8 sont tronqués Feb 08, 2023 am 10:29 AM

Solution aux caractères chinois tronqués dans le nœud utf8 : 1. Vérifiez le type de "SarchName" via "typeof" ; 2. Utilisez "Name=iconv.decode(name,'gbk')" pour convertir l'encodage en utf8.

Fonction substr() en PHP : comment intercepter une partie d'une chaîne Fonction substr() en PHP : comment intercepter une partie d'une chaîne Nov 03, 2023 am 10:43 AM

La fonction substr() en PHP : Comment intercepter une partie d'une chaîne nécessite des exemples de code spécifiques. En programmation PHP, le traitement des chaînes est l'une des opérations les plus courantes. L'interception d'une partie d'une chaîne est une exigence souvent rencontrée lors du traitement de chaînes. En PHP, nous pouvons utiliser la fonction intégrée substr() pour intercepter une partie d'une chaîne. Cet article présentera en détail l’utilisation de la fonction substr() et donnera des exemples de code spécifiques. L'utilisation de base de la fonction substr() est la suivante : chaîne

Utilisez la fonction LEFT de MySQL pour intercepter la longueur spécifiée de la chaîne Utilisez la fonction LEFT de MySQL pour intercepter la longueur spécifiée de la chaîne Jul 25, 2023 pm 05:04 PM

Utilisez la fonction LEFT de MySQL pour intercepter la longueur spécifiée d'une chaîne Dans MySQL, nous avons souvent besoin d'intercepter des chaînes pour répondre à des besoins spécifiques. Parmi elles, la fonction LEFT est une fonction très pratique qui permet d'intercepter la longueur spécifiée d'une chaîne. Cet article explique comment utiliser la fonction LEFT de MySQL pour intercepter des chaînes et donne des exemples de code. Tout d’abord, nous devons comprendre la syntaxe de la fonction LEFT. La syntaxe de base de la fonction LEFT est la suivante : LEFT(string,lengt

Comment utiliser la fonction RIGHT dans MySQL pour intercepter la partie droite d'une chaîne Comment utiliser la fonction RIGHT dans MySQL pour intercepter la partie droite d'une chaîne Jul 12, 2023 am 10:20 AM

Comment utiliser la fonction RIGHT dans MySQL pour intercepter la partie droite d'une chaîne. Dans MySQL, la fonction RIGHT est une fonction utilisée pour intercepter la partie droite d'une chaîne. Il accepte deux paramètres : la chaîne à intercepter et la longueur à intercepter, et renvoie une chaîne contenant la longueur spécifiée. Utilisez la fonction RIGHT pour obtenir très facilement la bonne partie d’une chaîne. Ci-dessous, nous montrerons comment utiliser la fonction RIGHT à travers des exemples de code. Tout d’abord, nous devons créer un exemple de table de données pour stocker les chaînes à intercepter. CR

See all articles