PHP:unicode和多字节操作

PHP:unicode和多字节操作,php,character-encoding,Php,Character Encoding,我有一个韩语Unicode字符串(。。。입니다.소재...),我想在标记之间拆分。我愚蠢地使用了常规的字符串运算符,比如substr()和strpos(),然后才意识到有mb.*()函数。。下面是我所拥有的 $str = `...입니다.<br /><br />소재...`; $k = mb_strrpos($str, '<br /><br />'); // want the last match $firstPortion = mb_subs

我有一个韩语Unicode字符串(
。。。입니다.

소재...),我想在

标记之间拆分。我愚蠢地使用了常规的字符串运算符,比如
substr()
strpos()
,然后才意识到有
mb.*()
函数。。下面是我所拥有的

$str = `...입니다.<br /><br />소재...`; 
$k = mb_strrpos($str, '<br /><br />');  // want the last match
$firstPortion = mb_substr($str, 0, $k);
$str=`。。。입니다.

소재...`; $k=mb_strrpos($str,

);//想要最后一场比赛吗 $firstparty=mb_substr($str,0,$k);

然而,它似乎仍然不起作用
$firstparty
最终要么是整个原始字符串,要么是原始字符串的某个随机部分。有人能看出我做错了什么吗?

那应该行得通。好吧,在您使用引号而不是(注意您使用了反勾号'而不是单引号')


无论如何,只要数据编码为unicode,并且您搜索的字符串仅为ascii,并且

为ascii,常规字符串函数也应该可以工作。否则,在某些编码中可能会出现边缘情况。

当我使用常规函数(
substr
strpos
)时,它确实找到了正确的位置。但是,当我使用
substr()
提取第一部分和最后一部分并将它们写入文本文件时,它们就被破坏了。使用
mb_substr()
似乎可以防止这种情况。我的PHP代码的开头也有一个标题:
header(“内容类型:text/plain;charset=UTF-8”)。我想我也试过
strpos()
然后
mb_substr()
,但我忘了。。我应该再试一次。不要混合常规和MBY版本,常规版本认为1字节是一个“字符”,而Mbx版本可以把多个字节看作一个字符,所以它们的位置和偏移不兼容。您还应该为mb_u函数指定编码。无论如何