2011-07-10 28 views
7

He leído otras preguntas, intenté las respuestas pero no obtuve ningún resultado al final. Lo que obtengo es, por ejemplo, esteCómo evitar mostrar el símbolo del signo de interrogación del diamante, incluso utilizando mb_substr y utf-8

Μήπως θα έπρεπε να � ... 

y no puedo eliminar ese extraño signo de interrogación. Lo que hago es obtener el contenido de una fuente RSS codificada también en <?xml version="1.0" encoding="UTF-8"?> utilizando el idioma griego para el contenido.

¿Hay alguna manera de arreglar esto?

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

<div><?php 
    $entry->description = strip_tags($entry->description); 
    echo mb_substr($entry->description, 0, 490); 
?> ...</div> 
+0

¿Qué es '$ entry'? ¿Podría el problema ser la codificación utilizada para almacenar el texto de la descripción? –

+0

He actualizado mi pregunta. Lo que hace, obtiene el contenido de un feed – EnexoOnoma

+0

El "signo de interrogación divertido" es un personaje real, llamado CARÁCTER DE REEMPLAZO. Probablemente se agregó a los datos porque la transmisión de tu feed no era legal UTF-8, es decir, no se pudo decodificar. ¿Puede mostrarnos el contenido de la entrada $ string como sugiere Abdullah? Perferable como una secuencia de bytes, ¿no es una secuencia de char? ¿Y está seguro de que los datos del feed original estaban codificados en UTF-8? –

Respuesta

17

Esta es la respuesta

mb_substr($entry->description, 0, 490, "UTF-8"); 
+0

excelente solución –

0

¿Ha intentado utilizar estas funciones de cadenas multibyte seguras aparentemente redundante que no están en el núcleo de PHP?

http://code.google.com/p/mbfunctions/

Parece que ofrecen una función mb_strip_tags() como por ejemplo:

if (! function_exists('mb_strip_tags')) 
{ 
    function mb_strip_tags($document,$repl = ''){ 
     $search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript 
        '@<[\/\!]*?[^<>]*?>@si',   // Strip out HTML tags 
        '@<style[^>]*?>.*?</style>@siU', // Strip style tags properly 
        '@<![\s\S]*?--[ \t\n\r]*>@'   // Strip multi-line comments including CDATA 
    ); 
     $text = mb_preg_replace($search, $repl, $document); 
     return $text; 
    } 
} 
+0

Como soy un poco principiante, ¿cómo puedo usar ese archivo que tengo que descargar en mi cPanel? – EnexoOnoma

+0

Simplemente descárguelo de ese enlace que proporcioné, cárguelo en su servidor con el resto de sus archivos php, e inclúyalo con include_once ('mbfunctions-whatever.php'); – AlienWebguy

+0

Ok, lo hice, pero lo que obtuve fue que el contenido fue reemplazado por signos de interrogación – EnexoOnoma

12

Creo que el problema es con su codificación. Su salida UTF-8 pero su navegador no puede interpretar uno de los caracteres. El símbolo del signo de interrogación, como lo he conocido en el pasado, en realidad lo genera el navegador, por lo que no hay que buscar ni reemplazar ... se trata de corregir la codificación O eliminar caracteres desconocidos de la cadena antes de enviarla ...

Si tiene acceso a la fuente de datos, entonces es posible que desee comprobar la configuración de la base de datos para asegurarse de que está codificada correctamente ... de lo contrario, tendrá que encontrar la forma de convertir los datos usando php .. .NOT una tarea fácil ...

Tal vez:

mb_convert_encoding($string, "UTF-8"); 
+0

Hmmm, ¿por qué obtuve un voto a favor? – espradley

+1

+1 Parece que envió la OP en la dirección correcta con el argumento "UTF-8", no estoy seguro de por qué alguien podría votar por esto. –

+1

Gracias espradley. Si pudiera votar esto 7000 veces, lo haría. He escapado de la cárcel de charset. Esto funciona para arreglar cosas a nivel de plantilla. – Tom

Cuestiones relacionadas