php - tutorial - Obtener el primer personaje de la cadena UTF-8
yii2 basic (4)
Obtengo una cadena UTF-8 de db, y trato de hacer eco de su primer carácter:
$ title = $ model-> title; echo $ title [0];
Me sale:
¿Qué pasa? ¡Gracias!
Hay varias cosas que debes tener en cuenta:
- Verifique que los datos en el DB estén almacenados como UTF-8
- Verifique que la conexión del cliente con el DB esté en UTF-8 (por ejemplo, en mysql vea: http://www.php.net/manual/en/mysqli.character-set-name.php )
- Asegúrese de que la página tenga su tipo de contenido configurado como UTF-8 [puede usar el encabezado (''Content-Type: utf-8''); ]
- Intente configurar la codificación interna, usando mb_internal_encoding ("UTF-8");
hth
PHP Strings no entiende las cadenas multibyte de manera predeterminada, la matriz como indexación cortará el primer byte y si eso no está en el rango de ASCII obtienes este resultado.
Use el método mb_substr .
$first_char = mb_substr($title, 0, 1);
Necesita utilizar las funciones de cadenas de múltiples bytes de PHP para manejar adecuadamente las cadenas Unicode:
http://www.php.net/manual/en/ref.mbstring.php
http://www.php.net/manual/en/function.mb-substr.php
También necesitarás especificar la codificación de caracteres en el <head>
de tu HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
o:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16" />
Como se mencionó anteriormente en otras preguntas, con PHP, al intentar obtener una subcadena, no entiende los caracteres multibyte (como se obtiene con UTF8, por ejemplo).
Lo que las otras respuestas no mencionan es que debe indicar la codificación que le gustaría usar para mb_substr
Entonces, por ejemplo, uso esto:
mb_substr( "Sunday", 0, 1,''UTF8''); // Returns S
mb_substr( "воскресенье", 0, 1,''UTF8''); // Returns в