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$encoding
parâ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_encoding
para 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_ci
vs.utf8_bin
só faz diferença quando agrupar , ou seja, classificar e comparar strings. Comutf8_bin
os dados são tratados em forma binária, ou seja, apenas dados idênticos são idênticos. Comutf8_general_ci
alguma lógica é aplicada, e. "é" classifica junto com "e" e maiúsculas são consideradas iguais a minúsculas.