variable una str_replace parte extraer eliminar delete caracteres caracter cadena buscar php encoding utf-8 mbstring

una - substr php



Funciones de cadena PHP vs funciones mbstring (3)

Tengo una aplicación que hasta ahora ha estado en inglés solamente. La codificación de contenido en todas las plantillas y bases de datos ha sido UTF-8. Ahora estoy buscando internacionalizar / traducir la aplicación a los idiomas que tienen conjuntos de caracteres que necesitan absolutamente UTF-8.

La aplicación utiliza varias funciones de cadenas PHP como strlen() , strpos() , substr() , etc., y mi entendimiento es que debo cambiarlas por funciones de cadenas de múltiples bytes, como mb_strlen() , mb_strlen() , mb_substr() , etc., para que los caracteres multi-byte se manejen correctamente. Intenté leer un poco sobre este tema, pero prácticamente todo lo que puedo encontrar profundiza en la "teoría de la codificación" y no proporciona una respuesta simple a la pregunta: si utilizo UTF-8 en todo momento, ¿puedo cambiar de usando strlen() para mb_strlen() y espero que las cosas funcionen normalmente, por ejemplo, en inglés y en árabe, o ¿hay algo más por lo que deba tener cuidado?

Cualquier idea sería bienvenida, y me disculpo si estoy ofendiendo a alguien que tiene una codificación cercana a su corazón con mi relativa ignorancia.


Compruebe el estado de la bandera mbstring.func_overload en php.ini

If (ini_get (''mbstring.func_overload'') & 2) funciones como strlen () (como se lista aquí ) ya están sobrecargadas por la función mb_strlen (), por lo que no es necesario que invoque explícitamente las funciones mb_ *.


No. Como las bytearrays también son cadenas en PHP, un simple reemplazo de las funciones de cadena de 8 bits con sus equivalentes mb_ * no causará más que problemas. Es probable que funciones como strlen () y substr () se usen con más frecuencia en bytes que en cadenas de texto reales.

En el lugar donde trabajé por última vez, logramos construir un sitio web multilingüe (árabe, hindi, entre otros idiomas) en PHP sin usar la biblioteca mbstring. La manipulación de cadenas de texto en realidad no ocurre tan a menudo. Cuando lo haga, requerirá mucho más cuidado que simplemente cambiar el nombre de una función. La mayoría de los desafíos, he encontrado, se encuentran en el lado HTML. Obtener un diseño de página para trabajar con un lenguaje RTL es la parte no trivial.

No sé si solo estás usando el árabe como ejemplo. La dificultad de la internacionalización puede variar bastante dependiendo de si "internacional" significa solo idiomas europeos (más ruso), o si incluye idiomas de Oriente Medio, sudasiático y lejano.


El número de funciones multibyte realmente necesarias es menor de 10, por lo que cree 3 o 5 preguntas si el uso de la función o la lógica es bueno. Esta pregunta es obsecuente y difícil de responder. Las pequeñas preguntas pueden obtener respuestas rápidas. Las preguntas concretas pueden traer buenas respuestas. avísame cuando crees otras preguntas.

Si necesita casos de uso, consulte las funciones de respaldo en CMSes como Wordpress , MediaWiki , Drupal .

Cuando decida comenzar a usar mbstring, debe evitar el uso de la directiva mbstring.func_overload. Los mantenedores de Mbstring van a depreciar mbstring.func_overload en PHP 5.5 o 5.6 (consulte la lista de correo de P HP Core en abril de 2012). mbstring.func_overload rompe las bases de código que no se espera que usen mbstring.func_overload. Puede ver los casos en CakePHP, Zend Framework 1x en la caliculacion de Content-Length usando strlen () .

Respondí la pregunta similar en otro lugar: ¿Debería refactorizar todo mi framework para usar las funciones de mbstring?