0

マルチバイトシンボルの1つが最初に出現した位置を返すことができるPHPの標準関数はありますか?

全体のタスクは次のとおりです。マルチバイト文字列とこの文字列内の位置があり、記号 (区切り文字) の最初の出現箇所を見つける必要があります。次の関数を書きましたが、残念ながら動作が非常に遅いです。

$delimiters = array( 
    "\r", "\n", "\t", ".", ";", "!", "?"
);

function get_cit_end($str, $end) {
    global $delimiters;
    if( $end >= mb_strlen($str) )
        return mb_strlen($str) - 1;
    $c = mb_substr($str, $end, 1);
    while( $end < mb_strlen($str) ) {
        if( in_array($c, $delimiters) )
            break;
        $end++;
        $c = mb_substr($str, $end, 1);
    }
    return $end;
}
4

2 に答える 2

2

私は次mb_strpos()のように使用します:

function get_cit_end($str, $delimeters) {
    $index = -1;
    foreach( $delimiters as $d) {
        if( ($i = mb_strpos( $str, $d)) !== false) {
            $index = $i;
            break;
        }
    }
    if( $index == -1) return mb_strlen( $str) - 1;
    return $index;
}
于 2012-10-23T13:01:42.413 に答える
0

関数のオーバーロードを有効にすると、マルチバイト文字列でmbstring通常の関数を使用できます。strpos()

次のmbstring-variablesは、php.iniまたはvhost-configurationを介して設定する必要があります。ディレクトリごとに(つまり、.htaccess経由で)機能しません。

  • mbstring.language=ニュートラル
  • mbstring.internal_encoding = UTF-8
  • mbstring.func_overload = 7

参照:http://php.net/mbstring

于 2012-10-23T13:07:08.113 に答える