mb_internal_encoding('UTF-8')não faz nada por si só, apenas define o parâmetro de codificação padrão para cadamb_função. Se você não estiver usando nenhummb_função, não faz diferença. Se estiver, faz sentido configurá-lo para que você não precise passar o$encodingparâmetro cada vez individualmente.- IMO
mb_detect_encodingé praticamente inútil, pois é fundamentalmente impossível detectar com precisão a codificação de texto desconhecido. Você deve saber em que codificação um blob de texto está porque tem uma especificação sobre ele ou precisa analisar metadados apropriados, como cabeçalhos ou metatags, onde a codificação é especificada. - Usando
mb_check_encodingpara verificar se um blob de texto é válido na codificação que você espera que seja, normalmente é suficiente. Se não estiver, descarte-o e lance um erro apropriado. -
A respeito de:
Se você está manipulando strings que contêm caracteres multibyte, então sim, você precisa usar omb_funções para evitar obter resultados errados. As funções principais de strings funcionam apenas em um nível de byte, não em um nível de caractere, que é o que você normalmente deseja ao trabalhar com strings.
utf8_general_civs.utf8_binsó faz diferença quando agrupar , ou seja, classificar e comparar strings. Comutf8_binos dados são tratados em forma binária, ou seja, apenas dados idênticos são idênticos. Comutf8_general_cialguma lógica é aplicada, e. "é" classifica junto com "e" e maiúsculas são consideradas iguais a minúsculas.