安全で信頼性の高い暴力的なバージョンを使用することをお勧めします。笑
プログラミングの観点からは、穏やかなバージョンの方が効率的です。
基本的な原理は、off と len の位置ずれの可能性を修正することです。穏やかなバージョンでは、最初に見つかった文字は
/**
* @brief シンプルで効率的な文字列インターセプト関数 (CJK 文字をサポート)
*
* 上位部分の ASCII 値を決定するだけで、ほとんどの通常の中国語と英語の混合文字列を処理できます
* 4バイトまたは3バイトのutfエンコーディングをサポートしていません
*
* 要点: off 値/len 値の位置ずれを 2 バイトで修正します (パラメータ $len のデフォルト値が -1 である目的に注意してください)
※使い方はsubstr()と同じですが、GBKコードの下位ビット(0x40以降)に問題がある可能性があります
*/
関数 my_substr($str, $off, $len = -1)
{
$mlen = strlen($str);
/* ステップ 0: パラメータのセキュリティチェックと修正 */
if ($off
$off = $mlen;
if ($off > $mlen)
$off = 0;
/* ステップ 1: $off 修正、後方検索 */
if ($off > 0)
{
$fix = $off;
$mb = false;
する
{
$ch = ord($str{$fix--});
if ($ch
休憩;
$mb = true;
}
while ($fix);
($mb) の場合
{
$fix = ($off - $fix);
if ($fix & 1)
{
$オフ--;
$レン;
}
}
}
/* ステップ 2: $len の修正、上記と同じ */
if ($len = $mlen)
{
$len = $mlen - $off;
}
それ以外
{