2009-07-27 19 views
23

esto es lo que tengo en este momentoeliminación de personajes extraños de PHP cadena

Dibujo un canal RSS en el php, xml prima a partir de la fuente RSS lee:

Paul’s Confidence 

El PHP que tengo hasta ahora es esto

$newtitle = $item->title; 
$newtitle = utf8_decode($newtitle); 

Lo anterior regresa;

Paul?s Confidence 

Si quito el utf_decode, me sale este

Paul’s Confidence 

Cuando trato de un str_replace;

$newtitle = str_replace("”", "", $newtitle); 

Es no funciona, me sale;

Paul’s Confidence 

¿Alguna idea?

+0

En su primer código de bloque que escribió ’ En su str_replace(), que escribió ” Es esta afectando a los resultados? – sshow

+4

Diría que la codificación de caracteres de la página en la que intenta mostrar la cadena podría estar afectando su resultado ... es el resultado anterior en cualquier página web en algún lugar que podríamos ver como referencia (cuando lo pruebo localmente no lo hago) para obtener cualquier resultado funky, solo una comilla) –

+0

el feed es http: // claygroup.org/blog/feed/ @sshow fue un error tipográfico – mrpatg

Respuesta

2

es el escenario de su servidor PHP algo que no sea UTF-8 codificación de caracteres? Si es así, ¿hay alguna razón o podría cambiarse a UTF-8? Aunque no almacenamos datos en UTF-8 en nuestra base de datos, he encontrado que la fijación de carácter del servidor web establece en UTF-8 parece ayudar temas de juego de caracteres resolución.

Me interesaría escuchar las opiniones de los demás sobre esto ... si me estoy preparando para problemas configurando el servidor web en UTF-8 mientras almacenaba los datos enviados en Latin1 en nuestra base de datos mysql. Sé que había una razón por la que elegí Latin1 para la base de datos, pero no recuerdo qué era. Curiosamente, nuestra configuración actual parece permitir no UTF-8 de introducción de caracteres y posterior renderizado ... parece que el almacenamiento en Latin1 no impide la posterior decodificación y visualización de todos los caracteres UTF-8?

9

He resuelto el problema. Parece ser una solución corta en lugar del problema más grande, pero funciona.

$newtitle = str_replace('’', "'", $newtitle); 

También encontré este útil snippit que puede ayudar a otros con el mismo problema;

<? 
$find[] = '“'; // left side double smart quote 
$find[] = 'â€'; // right side double smart quote 
$find[] = '‘'; // left side single smart quote 
$find[] = '’'; // right side single smart quote 
$find[] = '…'; // elipsis 
$find[] = '—'; // em dash 
$find[] = '–'; // en dash 

$replace[] = '"'; 
$replace[] = '"'; 
$replace[] = "'"; 
$replace[] = "'"; 
$replace[] = "..."; 
$replace[] = "-"; 
$replace[] = "-"; 

$text = str_replace($find, $replace, $text); 
?> 

Gracias a todos por su tiempo y consideración.

+0

Esto no funciona para un cuadro de Linux, sin embargo, como la codificación del archivo 'php' podría ser diferente, la representación de los caracteres especiales es inútil. Solo un FYI. – Jakub

+0

Sí, esto no funciona para mí. ¿Cuál es la solución para esto? – vaichidrewar

+2

Debe colocar el 'â €' (cita inteligente doble del lado derecho) al final de la matriz o va a coincidir con cualquier cosa que comience por â €. – Zoot

6

Sí esto no está funcionando para mí. ¿Cuál es la solución para esto?- vaichidrewar 12 Mar a las 22:29

Añadir esto a la cabeza de HTML (o modificar si ya existe):

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

Esto codificar los caracteres divertidos como "€ œ A" en UTF-8 para que la función str_replace() los interprete correctamente.

O usted puede hacer esto:

ini_set('default_charset', 'utf-8'); 
0

No funciona Es necesario utilizar $ arr1 = str_split ($ str) continuación forEach y eco ($ matriz1 [$ k]) Esto le mostrará exactamente qué caracteres están escritos en la cadena.

15

Esta es mi función que funciona siempre, independientemente de la codificación:

function RemoveBS($Str) { 
    $StrArr = str_split($Str); $NewStr = ''; 
    foreach ($StrArr as $Char) {  
    $CharNo = ord($Char); 
    if ($CharNo == 163) { $NewStr .= $Char; continue; } // keep £ 
    if ($CharNo > 31 && $CharNo < 127) { 
     $NewStr .= $Char;  
    } 
    } 
    return $NewStr; 
} 

Cómo funciona:

echo RemoveBS('Hello õhowå åare youÆ?'); // Hello how are you? 
+0

¡Infierno sí! esto funcionó para mí :) Gracias @David D – vijayrana

+0

Esto no conserva la codificación UTF8. – besimple

+0

No creo que se suponía que así fuera, dicho esto, ¡puedes codificar para UTF-8 después o modificar la función para tus propias necesidades! –

2

Utilice el código PHP a continuación para eliminar

html_entity_decode(mb_convert_encoding(stripslashes($name), "HTML-ENTITIES", 'UTF-8')) 
-1

Sólo una solución simple.

si su cadena contiene este tipo de caracteres extraños suponen $text contiene algunos de ellos a continuación, sólo hacerlo como se muestra a continuación:

$mytext=mb_convert_encoding($text, "HTML-ENTITIES", 'UTF-8') 

y funcionará ..

0

solución súper simple es tener los caracteres decodificados cuando se carga la página

Simplemente copie/pegue lo siguiente al comienzo de la secuencia de comandos

header('Content-Type: text/html; charset=UTF-8'); 

mb_internal_encoding('UTF-8'); 
mb_http_output('UTF-8'); 
mb_http_input('UTF-8'); 
mb_regex_encoding('UTF-8'); 

Referencia: http://php.net/manual/en/function.mb-internal-encoding.php comentario dejado por webfav en la web punto de

6

Esto eliminará todos los caracteres no ASCII/caracteres especiales de una cadena.

//Remove from a single line string 
 
$output = "Likening ‘not-critical’ with"; 
 
$output = preg_replace('/[^(\x20-\x7F)]*/','', $output); 
 
echo $output; 
 
    
 
//Remove from a multi-line string 
 
$output = "Likening ‘not-critical’ with \n Likening ‘not-critical’ with \r Likening ‘not-critical’ with. ' ! -."; 
 
$output = preg_replace('/[^(\x20-\x7F)\x0A\x0D]*/','', $output); 
 
echo $output;

0
Please Try this. 


$find[] = '/&acirc;&#128;&#156;/' //'“'; // left side double smart quote 
$find[] = '/&acirc;&#128;&#157;/' //'â€'; // right side double smart quote 
$find[] = '/&acirc;&#128;&#152;/' //'‘'; // left side single smart quote 
$find[] = '/&acirc;&#128;&#153;/' //'’'; // right side single smart quote 
$find[] = '/&acirc;&#128;&#133/' //'…'; // elipsis 
$find[] = '/&acirc;&#128;&#150;/' //'—'; // em dash 
$find[] = '/&acirc;&#128;&#147;/' //'–'; // en dash 

$replace[] = '&ldquo;' // '"'; 
$replace[] = '&rdquo;' // '"'; 
$replace[] = '&lsquo;' // "'"; 
$replace[] = '&rsquo;' // "'"; 
$replace[] = '&#8943;' // "..."; 
$replace[] = '&mdash;' // "-"; 
$replace[] = '&ndash;' // "-"; 

$text = str_replace($find, $replace, $text); 
Cuestiones relacionadas