Heim Backend-Entwicklung PHP-Tutorial 真正根据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&…"
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie viele Bytes belegen utf8-codierte chinesische Zeichen? Wie viele Bytes belegen utf8-codierte chinesische Zeichen? Feb 21, 2023 am 11:40 AM

UTF8-kodierte chinesische Zeichen belegen 3 Bytes. Bei der UTF-8-Kodierung entspricht ein chinesisches Zeichen drei Bytes und ein chinesisches Satzzeichen belegt drei Bytes, während bei der Unicode-Kodierung ein chinesisches Zeichen (einschließlich traditionellem Chinesisch) zwei Bytes entspricht. UTF-8 benötigt zur Kodierung jedes Zeichens nur 1 Byte. Für Latein, Griechisch, Kyrillisch und Hebräisch sind 2 Byte erforderlich Codierung.

So fangen Sie eine Zeichenfolge in der Go-Sprache ab So fangen Sie eine Zeichenfolge in der Go-Sprache ab Mar 13, 2024 am 08:33 AM

Die Go-Sprache ist eine leistungsstarke und flexible Programmiersprache, die umfangreiche Funktionen zur Zeichenfolgenverarbeitung bietet, einschließlich des Abfangens von Zeichenfolgen. In der Go-Sprache können wir Slices verwenden, um Zeichenfolgen abzufangen. Als Nächstes stellen wir anhand spezifischer Codebeispiele ausführlich vor, wie Zeichenfolgen in der Go-Sprache abgefangen werden. 1. Verwenden Sie Slicing, um eine Zeichenfolge abzufangen. In der Go-Sprache können Sie Slicing-Ausdrücke verwenden, um einen Teil einer Zeichenfolge abzufangen. Die Syntax des Slice-Ausdrucks lautet wie folgt: Slice:=str[Start:End]wo, s

So fangen Sie einen String in der Go-Sprache ab So fangen Sie einen String in der Go-Sprache ab Jan 12, 2023 pm 04:02 PM

Abfangmethode: 1. Ein einzelnes Zeichen abfangen, die Syntax „string[index]“, wobei „string“ die Quellzeichenfolge und „index“ den zu erhaltenden Zeichenindex darstellt. 2. Einen Teilstring abfangen, die Syntax „string“. [Start: Ende]“, wobei „Start“ den Index des ersten abzufangenden Zeichens darstellt (einschließlich dieses Zeichens beim Abfangen), „Ende“ den Index des letzten abzufangenden Zeichens darstellt (ohne dieses Zeichen 3); . Holen Sie sich den gesamten String, Syntax „string[:]“.

So verwenden Sie die LEFT-Funktion in MySQL, um den linken Teil einer Zeichenfolge abzufangen So verwenden Sie die LEFT-Funktion in MySQL, um den linken Teil einer Zeichenfolge abzufangen Jul 12, 2023 pm 01:37 PM

So verwenden Sie die LEFT-Funktion in MySQL, um den linken Teil einer Zeichenfolge abzufangen. In Datenbankverwaltungssystemen stoßen wir häufig auf Situationen, in denen wir einen bestimmten Teil einer Zeichenfolge abfangen müssen. MySQL bietet viele integrierte String-Funktionen, einschließlich der LEFT-Funktion, mit der der linke Teil eines Strings abgefangen werden kann. Die Syntax der LEFT-Funktion lautet wie folgt: LEFT (str, Länge), wobei str die abzufangende Zeichenfolge und Länge die abzufangende Länge ist. Als nächstes werden wir anhand von Codebeispielen demonstrieren, wie das geht

Was tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind? Was tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind? Feb 08, 2023 am 10:29 AM

Lösung für verstümmelte chinesische Zeichen im Knoten utf8: 1. Überprüfen Sie den Typ von „SarchName“ über „typeof“. 2. Verwenden Sie „Name=iconv.decode(name,‘gbk‘)“, um die Codierung in utf8 zu konvertieren.

substr()-Funktion in PHP: Wie man einen Teil einer Zeichenfolge abfängt substr()-Funktion in PHP: Wie man einen Teil einer Zeichenfolge abfängt Nov 03, 2023 am 10:43 AM

Die Funktion substr() in PHP: Das Abfangen eines Teils einer Zeichenfolge erfordert bestimmte Codebeispiele. In der PHP-Programmierung ist die Verarbeitung von Zeichenfolgen eine der häufigsten Operationen. Das Abfangen eines Teils einer Zeichenfolge ist eine Anforderung, die bei der Verarbeitung von Zeichenfolgen häufig auftritt. In PHP können wir die integrierte Funktion substr() verwenden, um einen Teil eines Strings abzufangen. In diesem Artikel wird die Verwendung der Funktion substr() ausführlich vorgestellt und spezifische Codebeispiele gegeben. Die grundlegende Verwendung der Funktion substr() ist wie folgt: string

Verwenden Sie die LEFT-Funktion von MySQL, um die angegebene Länge der Zeichenfolge abzufangen Verwenden Sie die LEFT-Funktion von MySQL, um die angegebene Länge der Zeichenfolge abzufangen Jul 25, 2023 pm 05:04 PM

Verwenden Sie die LEFT-Funktion von MySQL, um die angegebene Länge einer Zeichenfolge abzufangen. In MySQL müssen wir häufig Zeichenfolgen abfangen, um bestimmte Anforderungen zu erfüllen. Unter diesen ist die LEFT-Funktion eine sehr praktische Funktion, die die angegebene Länge einer Zeichenfolge abfangen kann. In diesem Artikel wird die Verwendung der LEFT-Funktion von MySQL zum Abfangen von Zeichenfolgen vorgestellt und Codebeispiele gegeben. Zuerst müssen wir die Syntax der LEFT-Funktion verstehen. Die grundlegende Syntax der LEFT-Funktion lautet wie folgt: LEFT(string,lengt

So verwenden Sie die RIGHT-Funktion in MySQL, um den rechten Teil einer Zeichenfolge abzufangen So verwenden Sie die RIGHT-Funktion in MySQL, um den rechten Teil einer Zeichenfolge abzufangen Jul 12, 2023 am 10:20 AM

So verwenden Sie die RIGHT-Funktion in MySQL, um den rechten Teil einer Zeichenfolge abzufangen. In MySQL ist die RIGHT-Funktion eine Funktion, die zum Abfangen des rechten Teils einer Zeichenfolge verwendet wird. Es akzeptiert zwei Parameter: die abzufangende Zeichenfolge und die abzufangende Länge und gibt eine Zeichenfolge mit der angegebenen Länge zurück. Verwenden Sie die RIGHT-Funktion, um ganz bequem den richtigen Teil einer Zeichenfolge zu erhalten. Im Folgenden zeigen wir anhand von Codebeispielen, wie die RIGHT-Funktion verwendet wird. Zuerst müssen wir eine Beispieldatentabelle erstellen, um die abzufangenden Zeichenfolgen zu speichern. CR

See all articles