2009-07-27 26 views
23

questo è quello che ho in questo momentorimozione strani personaggi stringa php

Disegnare un feed RSS in php, xml grezzo dal feed rss legge:

Paul’s Confidence 

Il PHP che ho così è lontano.

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

Ritorna sopra;

Paul?s Confidence 

se mi tolgo l'utf_decode, ottengo questo

Paul’s Confidence 

Quando provo uno str_replace;

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

Non funziona, ottengo;

Paul’s Confidence 

Qualche idea?

+0

Nel tuo primo codice di blocco si scrive ’ Nella tua str_replace(), che ha scritto ” È questo influisce sui risultati? – sshow

+4

Direi che la codifica dei caratteri della pagina in cui stai provando a mostrare la stringa potrebbe influenzare il tuo risultato ... è l'output sopra riportato in qualsiasi pagina web da qualche parte in cui potremmo sbirciare per riferimento (quando provo localmente non lo faccio t ottenere risultati funky, solo una virgola) –

+0

il feed è http: // claygroup.org/blog/feed/ @sshow era un refuso – mrpatg

risposta

2

è l'impostazione per il server PHP qualcosa di diverso da UTF-8 codifica dei caratteri? Se è così, c'è un motivo o potrebbe essere cambiato in UTF-8? Sebbene non archiviamo i dati in UTF-8 nel nostro database, ho riscontrato che l'impostazione del set di caratteri del server web su UTF-8 sembra aiutare a risolvere i problemi relativi ai set di caratteri.

Sarei interessato a sentire le opinioni degli altri su questo ... se mi sto ponendo per problemi impostando webserver su UTF-8 mentre memorizzo i dati inviati in Latin1 nel nostro database mysql. So che c'era un motivo per cui ho scelto Latin1 per il database ma non riesco a ricordare cosa fosse. È interessante notare che la nostra configurazione attuale sembra consentire l'immissione di caratteri non UTF-8 e il successivo rendering ... sembra che l'archiviazione in Latin1 non impedisca la successiva decodifica e visualizzazione di tutti i caratteri UTF-8?

9

Ho risolto il problema. Sembra essere una soluzione breve piuttosto che il problema più grande, ma funziona.

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

Ho trovato anche questo utile snippit che può aiutare gli altri con lo stesso 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); 
?> 

Grazie a tutti per il vostro tempo e considerazione.

+0

Questo non funziona per una macchina Linux, tuttavia la codifica del file 'php' potrebbe essere diversa rendendo inutilizzabili i caratteri speciali. Solo una FYI. – Jakub

+0

Sì, questo non funziona per me. Qual è la soluzione per questo? – vaichidrewar

+2

Devi mettere la "(doppia virgola mobile a destra) alla fine dell'array o abbinerà tutto a partire da â €". – Zoot

6

Sì, questo non funziona per me. Qual è la soluzione per questo?- vaichidrewar 12 marzo alle 22:29

Aggiungi questo alla testa HTML (o modificare se già presente):

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

Ciò codificare i caratteri divertenti come "â € œ" in UTF-8 in modo che la funzione str_replace() li interpreti correttamente.

Oppure si può fare questo:

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

Non funziona È necessario utilizzare $ arr1 = str_split ($ str) poi foreach e eco ($ arr1 [$ k]) Questo ti mostrerà esattamente quali caratteri sono stati scritti nella stringa.

15

Questa è la mia funzione che funziona sempre, a prescindere dalla codifica:

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; 
} 

Come funziona:

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

Hell Yeah! questo ha funzionato per me :) Grazie @David D – vijayrana

+0

Questo non conserva la codifica UTF8. – besimple

+0

Non credo che si supponesse che - in seguito, è possibile codificare in UTF-8 in seguito o modificare la funzione per le proprie esigenze! –

2

Usa il codice PHP di seguito per rimuovere

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

Solo uno soluzione semplice.

se la stringa contiene questo tipo di strani caratteri supponga $text contiene alcuni di questi poi basta fare come mostrato sotto:

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

e funzionerà ..

0

Super semplice soluzione è quella di i caratteri vengono decodificati quando la pagina viene caricata

Basta copiare/incollare quanto segue all'inizio dello script

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'); 

Riferimento: http://php.net/manual/en/function.mb-internal-encoding.php commento lasciato da webfav al web dot de

6

Questo eliminerà tutti i caratteri non ASCII/caratteri speciali da una stringa.

//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);