php函数来查找其中一个多字节字符的位置

php函数来查找其中一个多字节字符的位置,php,multibyte,Php,Multibyte,php中是否有一个标准函数可以返回一个多字节符号第一次出现的位置 总的来说,任务如下。我有多字节字符串和这个字符串中的位置,我需要找到其中一个符号(分隔符)的第一个匹配项。我编写了以下函数,但不幸的是,它的速度非常慢 $delimiters = array( "\r", "\n", "\t", ".", ";", "!", "?" ); function get_cit_end($str, $end) { global $delimiters; if( $end &g

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;
}
$delimiters=数组(
“\r”、“\n”、“\t”、“;”、“!”、“?”
);
函数get\u cit\u end($str,$end){
全局$分隔符;
如果($end>=mb_strlen($str))
返回mb_strlen($str)-1;
$c=mb_substr($str,$end,1);
而($end
我会这样使用:

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;
}

如果启用
mbstring
函数重载,则可以对多字节字符串使用正常的
strps()
函数:

应通过php.ini或vhost配置设置以下mbstring变量;它们不会在每个目录下工作(即通过.htaccess)

  • mbstring.language=中性
  • mbstring.internal_encoding=UTF-8
  • mbstring.func_重载=7
另请参见:

为什么不使用?