2011-06-06 14 views
12

Cuando uso la función substr() en php, obtengo un questionmark (un cuadrado con un questionmark - dependiendo del navegador) al final de la cadena cuando este último carácter era uno especial, como ë o ö, etc ...php substr con carácter especial en el resultado final en questionmark

$introtext=html_entity_decode($item->description, ENT_QUOTES, "UTF-8"); 
$introtext=substr($introtext,0,200); 

¿Cómo puedo escapar de esto? ¡Gracias por adelantado!

Respuesta

29

Si la cadena tiene la codificación de varios bytes (como UTF-8) lo hace, se debe utilizar mb_substr para evitar problemas como éste:

$introtext=mb_substr($introtext,0,200); 
+0

Gracias! Aún no conocía esa función. ¡Ahora trabajo bien! – Bert

+0

¡Genial! Funciona como se esperaba :) – Can

+0

Esto no funciona con letras escandinavas como åäö, necesarias para agregar utf-8 como Sruit A.Suk sugirió – EspeH

4

Esto se debe a substr no funciona con varios bytes caracteres. substr probablemente cortará un carácter multibyte "por la mitad". En su lugar, debe usar mb_substr. También asegúrese de que su archivo esté guardado en UTF-8.

$introtext = mb_substr($introtext, 0, 200); 
+0

¡Gracias! Funciona bien ahora – Bert

2

En caso de que alguien trató anteriormente y aún no funcionaba,

intenta agregar el nombre Unicode en mb_substr como

$introtext=mb_substr($introtext, 0, 200, 'utf-8'); 
+1

La respuesta aceptada no funcionó para mí, tenía que hacerlo a tu manera para que funcione con los caracteres escandinavos. Gracias – EspeH

Cuestiones relacionadas