PHP:我可以安全地在多字节字符串上使用explode吗

时间:2019-01-22 22:04:46

标签: php utf-8

我可以安全地在多字节字符串(特别是UTF8)上使用explode()吗?还是我需要使用mb_split()

如果mb_split(),为什么?

1 个答案:

答案 0 :(得分:0)

一个多字节的字符串仍然只是一个字符串,爆炸会很高兴地在您提供的任何分隔符上将其拆分。我的猜测是,在大多数情况下,它们的行为可能相同。如果您担心特定情况,请考虑使用以下测试脚本:

<?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脚本中定义这些字符串,就像我在这里一样。

我可能是错的,但是我相信这两个函数都可以通过查找要分解的字符串中的定界符实例来工作,并将它们拆分。