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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
如果启用mbstring
函数重载,则可以使用带有多字节字符串的普通strpos()
函数:
应通过php.ini或vhost-configuration设置以下mbstring-variables;他们不会按目录工作(即通过.htaccess)。