Когда я должен использовать mb_strpos (); через strpos () ;? - PullRequest
2 голосов
/ 19 апреля 2011

Да, глядя на все эти строковые функции, иногда я путаюсь. Один использует все время mb_ функции, другой - простые, так что вопрос прост ...

Когда я должен использовать mb_strpos(); и когда я должен идти с простым (strpos();)?

И, да, я знаю о том, что mb_ функции означают многобайтовые, но действительно ли это означает, что если я работаю только со строками в кодировке utf-8, я должен придерживаться mb_ функции?

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 19 апреля 2011

Вы должны использовать функции mb_ всякий раз, когда ожидаете работать с текстом, который не является чистым ASCII. То есть вы можете работать с обычными строковыми функциями, даже если вы используете UTF-8, если все используемые вами строки содержат только символы ASCII.

strpos('foobar', 'foo')  // fine in any (ASCII-compatible) encoding, including UTF-8
strpos('ふーばー', 'ふー') // won't work as expected, use mb_strpos instead
4 голосов
/ 19 апреля 2011

Да, если вы работаете с UTF-8 (это многобайтовая кодировка: один символ может использовать более одного байта) , вам следует использовать функции mb_*.

Функции, не относящиеся к mb, будут работать с байтами, а не с символами - это нормально, когда 1 символ == 1 байт; но это не относится к (например) UTF-8.

3 голосов
/ 19 апреля 2011

Я бы сказал, да, вот описание из документации php:

mbstring предоставляет многобайтовые специфические строковые функции, которые помогают вам работать с многобайтовыми кодировками в PHP.В дополнение к этому, mbstring обрабатывает преобразование кодировки символов между возможными парами кодирования. mbstring предназначен для обработки кодировок на основе Unicode, таких как UTF-8 и UCS-2 и многих однобайтовых кодировок, для удобства ....

Если вы не уверены, чтоРасширение mb загружено, прежде чем проверять, mb-string не является расширением по умолчанию.

...