mb_internal_encoding('UTF-8')
no hace nada por sí mismo, solo establece el parámetro de codificación predeterminado para cadamb_
función. Si no estás usando ningúnmb_
función, no hace ninguna diferencia. Si es así, tiene sentido configurarlo para que no tenga que pasar el$encoding
parámetro cada vez individualmente.- OMI
mb_detect_encoding
es en su mayoría inútil ya que es fundamentalmente imposible detectar con precisión la codificación de texto desconocido. Debe saber en qué codificación se encuentra un blob de texto porque tiene una especificación al respecto, o necesita analizar metadatos apropiados como encabezados o metaetiquetas donde se especifica la codificación. - Utilizando
mb_check_encoding
para verificar si una gota de texto es válida en la codificación en la que espera que esté, generalmente es suficiente. Si no es así, deséchelo y arroje un error apropiado. -
Con respecto a:
Si está manipulando cadenas que contienen caracteres multibyte, entonces sí, necesita usar
mb_
funciones para evitar obtener resultados erróneos. Las funciones principales de cadena solo funcionan a nivel de byte, no a nivel de carácter, que es lo que normalmente desea cuando trabaja con cadenas. utf8_general_ci
frente autf8_bin
solo marca la diferencia al cotejar , es decir, ordenar y comparar cadenas. Conutf8_bin
los datos se tratan en forma binaria, es decir, solo los datos idénticos son idénticos. Conutf8_general_ci
se aplica alguna lógica, p. "é" se ordena junto con "e" y las mayúsculas se consideran iguales a las minúsculas.