mb_internal_encoding('UTF-8')
не прави нищо само по себе си, задава само параметъра за кодиране по подразбиране за всекиmb_
функция. Ако не използватеmb_
функция, няма никаква разлика. Ако сте, има смисъл да го зададете, така че да не се налага да предавате$encoding
параметър всеки път поотделно.- IMO
mb_detect_encoding
е предимно безполезен, тъй като е принципно невъзможно да се открие точно кодирането на неизвестен текст. Трябва или да знаете в какво кодиране се намира блоб текст, защото имате спецификация за него, или трябва да анализирате подходящи мета данни, като заглавки или мета маркери, където е посочено кодирането. - Използване на
mb_check_encoding
за да проверите дали петно от текст е валидно в кодирането, в което очаквате да бъде, обикновено е достатъчно. Ако не е, изхвърлете го и изведете подходяща грешка. -
Относно:
Ако манипулирате низове, които съдържат многобайтови знаци, тогава да, трябва да използвате
mb_
функции, за да се избегне получаването на грешни резултати. Функциите на основния низ работят само на ниво байт, а не на ниво символ, което обикновено искате, когато работите с низове. utf8_general_ci
срещуutf8_bin
има разлика само при събиране , т.е. сортиране и сравняване на низове. Сutf8_bin
данните се третират в двоична форма, т.е. само идентични данни са идентични. Сutf8_general_ci
се прилага някаква логика, напр. "é" сортира заедно с "e" и главните букви се считат за равни на малки.