真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )_php技巧
/*
* 功能: 作用跟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&…"

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Aksara Cina yang dikodkan UTF8 menduduki 3 bait. Dalam pengekodan UTF-8, satu aksara Cina bersamaan dengan tiga bait, dan satu tanda baca bahasa Cina menduduki tiga bait manakala dalam pengekodan Unicode, satu aksara Cina (termasuk bahasa Cina tradisional) adalah sama dengan dua bait; UTF-8 menggunakan 1~4 bait untuk mengekod setiap aksara Satu aksara AS-ASCIl hanya memerlukan 1 bait untuk mengekod Latin, Yunani, Cyrillic, Armenia dan Ibrani dengan tanda diakritik , Arab, Syria dan huruf lain pengekodan.

Bahasa Go ialah bahasa pengaturcaraan yang berkuasa dan fleksibel yang menyediakan fungsi pemprosesan rentetan yang kaya, termasuk pemintasan rentetan. Dalam bahasa Go, kita boleh menggunakan kepingan untuk memintas rentetan. Seterusnya, kami akan memperkenalkan secara terperinci cara memintas rentetan dalam bahasa Go, dengan contoh kod khusus. 1. Gunakan penghirisan untuk memintas rentetan Dalam bahasa Go, anda boleh menggunakan ungkapan menghiris untuk memintas sebahagian daripada rentetan. Sintaks ungkapan slice adalah seperti berikut: slice:=str[start:end]where, s

Kaedah pemintasan: 1. Memintas aksara tunggal, sintaks "rentetan[indeks]", di mana "rentetan" mewakili rentetan sumber, dan "indeks" mewakili subskrip aksara yang akan diperolehi 2. Memintas subrentetan, sintaks "rentetan [start: end" ]", dengan "start" mewakili indeks aksara pertama yang akan dipintas (termasuk aksara ini apabila memintas), "end" mewakili indeks aksara terakhir yang akan dipintas (tidak termasuk aksara ini); . Dapatkan keseluruhan String, sintaks "rentetan[:]".

Cara menggunakan fungsi LEFT dalam MySQL untuk memintas bahagian kiri rentetan Dalam sistem pengurusan pangkalan data, kita sering menghadapi situasi di mana kita perlu memintas bahagian tertentu daripada rentetan. MySQL menyediakan banyak fungsi rentetan terbina dalam, termasuk fungsi KIRI, yang boleh digunakan untuk memintas bahagian kiri rentetan. Sintaks fungsi LEFT adalah seperti berikut: LEFT (str, length) dengan str ialah rentetan yang akan dipintas dan panjang ialah panjang yang akan dipintas. Seterusnya, kami akan menggunakan contoh kod untuk menunjukkan caranya

Penyelesaian kepada aksara Cina bercelaru dalam nod utf8: 1. Semak jenis "SarchName" melalui "typeof"; 2. Gunakan "Name=iconv.decode(name,'gbk')" untuk menukar pengekodan kepada utf8.

Fungsi substr() dalam PHP: Cara memintas sebahagian daripada rentetan memerlukan contoh kod khusus Dalam pengaturcaraan PHP, pemprosesan rentetan ialah salah satu operasi yang paling biasa. Memintas bahagian rentetan ialah keperluan yang sering ditemui semasa memproses rentetan. Dalam PHP, kita boleh menggunakan fungsi substr() terbina dalam untuk memintas sebahagian daripada rentetan. Artikel ini akan memperkenalkan penggunaan fungsi substr() secara terperinci dan memberikan contoh kod khusus. Penggunaan asas fungsi substr() adalah seperti berikut: rentetan

Gunakan fungsi LEFT MySQL untuk memintas panjang rentetan yang ditentukan Dalam MySQL, kita selalunya perlu memintas rentetan untuk memenuhi keperluan tertentu. Antaranya, fungsi LEFT adalah fungsi yang sangat praktikal yang boleh memintas panjang rentetan yang ditentukan. Artikel ini akan memperkenalkan cara menggunakan fungsi LEFT MySQL untuk memintas rentetan dan memberikan contoh kod. Pertama, kita perlu memahami sintaks fungsi LEFT. Sintaks asas fungsi LEFT adalah seperti berikut: LEFT(string,lengt

Cara menggunakan fungsi RIGHT dalam MySQL untuk memintas bahagian kanan rentetan Dalam MySQL, fungsi RIGHT ialah fungsi yang digunakan untuk memintas bahagian kanan rentetan. Ia menerima dua parameter: rentetan yang akan dipintas dan panjang yang akan dipintas, dan mengembalikan rentetan yang mengandungi panjang yang ditentukan. Gunakan fungsi RIGHT untuk mendapatkan bahagian rentetan yang betul dengan sangat mudah. Di bawah ini kami akan menunjukkan cara menggunakan fungsi RIGHT melalui contoh kod. Pertama, kita perlu mencipta jadual data sampel untuk menyimpan rentetan yang akan dipintas. CR
