我可以在多字节字符串(特别是 UTF8)上安全地使用
explode()
吗?还是我需要使用mb_split()
?
如果
mb_split()
,那为什么?
多字节字符串仍然只是一个字符串,并且explode会很乐意将其分割为您提供的任何分隔符。我的猜测是,在大多数情况下,它们的行为可能会相同。如果您担心特定情况,请考虑使用此测试脚本:
<?php
$test = array(
"ὕβρις",
"путин бандит",
"Дерипаска бандит",
"Трамп наша сука"
);
$delimiter = "д";
foreach($test as $t) {
$explode = explode($delimiter, $t);
echo "explode: " . implode("\t", $explode) . "\n";
$split = mb_split($delimiter, $t);
echo "split : " . implode("\t", $split) . "\n\n";
if ($explode != $split) {
throw new Exception($t . " splits differently!");
}
}
echo "script complete\n";
值得指出的是,explode() 和 mb_split() 具有完全相同的参数列表——没有任何语言或字符编码的引用。您还应该意识到,在 PHP 中如何定义字符串取决于您获取分隔符以及要分解/分割的字符串的位置和方式。您的字符串可能来自文本或 csv 文件、浏览器中的表单提交、通过 javascript 的 API 调用,或者您可以像我在这里一样在 PHP 脚本中定义这些字符串。
我可能是错的,但我相信这两个函数都可以通过在要分解的字符串中查找分隔符的实例并将它们拆分来工作。