ホームページ  >  記事  >  バックエンド開発  >  utf8エンコードのルールに従って真に文字列をインターセプトする関数(utf8版sub_str)_PHPチュートリアル

utf8エンコードのルールに従って真に文字列をインターセプトする関数(utf8版sub_str)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:14:561043ブラウズ

コードをコピー コードは次のとおりです:

/*
* 関数: 文字化けしないことを除いて、関数は substr と同じです
* パラメーター:
* 戻り値:
*/
function utf8_substr( $str , $start , $length=null ){
// 最初に通常通りインターセプトします。
$strlen = strlen( $str ); * その後、最初と最後の 6 バイトが完全である (不完全ではない) かどうかを判断します */
// パラメーター start が正の数の場合
if ( $start >= 0 ) {
// 約 6 バイト前方にカットします
$next_start = $start + $length; // 初期位置
$next_len = $next_start + 6 // 最初のバイトが完全な文字の最初のバイトではない場合、
$prev_start = $start - 6 >
$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 );完全な文字の最初のバイト、その後約 6 バイトをインターセプトします。
$prev_start = $start - 6 : 0; 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] .= $bytes
} ;
// 判定後の 6 ワード セクションは utf8 ルールに準拠していますか
$ord0 = ord( $res[0] );
if ( 128 <= $ord0 && 191 >= $ord0 ){
// インターセプト後ろから追加して res の前に追加します。 ( $bytes[0] ){
$ bytes = $bytes[0];
}
}
}
$res を返す




コードをコピーします

コードは次のとおりです:


$str = 'dfjdjf test 13f test 65&2 datafdj(1 is mfe&...just'
var_dump( utf8_substr( $str) , 22 , 12 ) ; echo '
' ;
var_dump( $str , 22 , -6 ) '; 9 , 12 ) ; echo '
';
var_dump( $str , 19 , 12 ) '; -6 ) ); echo '


結果の表示:: (文字化けのインターセプトはありません。誰でもテストしてバグを送信できます) string(12) "fsdj による" string( 26) "tofddjによると(1はmfe&…" string(13) "13f try 65&2 Number" string(12) "datadd"
string(20) "sj(1はmfe&…"



http://www.bkjia.com/PHPjc/326195.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/326195.html

技術記事

次のようにコードをコピーします。 /* * 関数: この関数は文字化けしないことを除いて、substr と同じです* パラメーター: * 戻り値: */ function utf8_substr( $str, $start, $length=null){ // まずは普通にカットします ..

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHPエンコード変換機能で文字セットの自動変換と配列変換をサポート_PHPチュートリアル次の記事:PHPエンコード変換機能で文字セットの自動変換と配列変換をサポート_PHPチュートリアル

関連記事

続きを見る