PHP: Могу ли я безопасно использовать разнесение на многобайтовой строке - PullRequest
0 голосов
/ 23 января 2019

Могу ли я безопасно использовать explode() для многобайтовой строки, особенно для UTF8?Или мне нужно использовать mb_split()?

Если mb_split(), то почему?

1 Ответ

0 голосов
/ 23 января 2019

Многобайтовая строка по-прежнему является строкой, и ее разрыв с радостью разделит ее на любой заданный вами разделитель. Я предполагаю, что они, вероятно, будут вести себя одинаково в большинстве случаев. Если вас беспокоит конкретная ситуация, рассмотрите возможность использования этого тестового сценария:

<?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-файла, отправки формы в браузере, вызова API через javascript, или вы можете определить эти строки прямо в вашем PHP-скрипте, как я здесь.

Возможно, я ошибаюсь, но я полагаю, что обе функции будут работать, разыскивая экземпляры разделителя в разбиваемой строке и будут разбивать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...