remove - PHP: ¿Es posible SUBSTRAR correctamente una cadena UTF-8?
strip_tags() (4)
Is mb_substr () no funciona para usted?
Tengo (en una base de datos SQLite) la siguiente cadena:
Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа.
La cadena se muestra correctamente mediante PHP utilizando print
. Me gustaría obtener solo los primeros 50 caracteres de esta cadena, es decir,
Лампа в вытяжке на кухне меняется, начиная с вытас
.
He intentado usar tanto el substr como mb_substr , y obtener
Лампа в вытяжке на кухне ме
, es decir, solo 28 caracteres.
Después de leer aquí y en otros lugares sobre los problemas de mbstring, me doy cuenta de que esto es en realidad una cadena de 50 bytes (22 caracteres rusos = 44 bytes más 5 espacios más 1 símbolo de pregunta).
¿Hay alguna buena solución para esto? Todas mis cadenas son UTF-8, así que podría programar una substrofunción, comprobando el primer bit de cada byte, etc. Pero esto seguramente debería haberse hecho antes, ¿no?
ACTUALIZACIÓN: Creo que mb_substr
no funciona correctamente porque mb_detect_encoding()
no funciona correctamente .
Vea la siguiente URL:
Extraer una subcadena de una cadena UTF-8 en PHP
http://osc.co.cr/extracting-a-substring-from-a-utf-8-string-in-php/
Subcadena de PHP con UTF-8
http://greekgeekz.blogspot.in/2010/11/php-substring-with-utf-8.html
O inténtalo:
Ejemplo 1
$str1 = utf8_encode("Feliz día");
$str2 = substr($str1, 0, 9);
echo utf8_decode($str2);
// will output Feliz d�
Ejemplo n. ° 2
$str3 = mb_substr($str1, 0, 9, ''UTF-8'');
echo utf8_decode($str3);
// will output Feliz dí
A partir de PHP> = 5.3 también puede declarar la directiva de codificación y usar la función substr
Ejemplo n. ° 3
declare(encoding=''UTF-8'');
$str4 = "Feliz día";
$str5 = substr($str4, 0, 9);echo $str5;
// will output Feliz dí
Pruebe mb_strcut()
.
Su comportamiento es el mismo que substr()
, excepto que no deja roto el último carácter.
Si en la posición que está tratando de cortar, tiene un carácter multibyte con 2 o más bytes, mb_strcut()
no cortará el personaje en pedazos, pero ignorará este carácter.
Por ejemplo, si está tratando de recortar 50 bytes de la cadena Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа.
, mb_strcut()
no cortará el carácter н
a la mitad, sino que lo eliminará del resultado.
$str = "Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа.";
echo mb_strcut($str, 0, 50);
// Prints: Лампа в вытяжке на кухне ме
echo substr($str, 0, 50);
// Prints: Лампа в вытяжке на кухне ме�
echo mb_substr($str, 0, 50);
// Prints: Лампа в вытяжке на кухне меняется, начиная с вытас
Espero eso ayude.
Como de costumbre, la respuesta parece haber estado aquí. (Honestamente, he buscado alrededor de una hora)
Una respuesta en (鉑) funciones de cadena y UTF8 en php lee:
Asegúrese de establecer la codificación interna adecuada: mb_internal_encoding (''utf-8'');
Con este mb_internal_encoding (''utf-8''); todo funciona bien Perdón por molestarlos chicos, gracias por la ayuda.