2015-11-12 16 views
6

Ho un feed da cui estrarre i dati in un database da. Fornisce i dati in formato XML. Tuttavia, i dati includono caratteri "illegali". Per esempio:Caratteri non validi nei dati di feed XML

A GREAT NEIGHBOURHOOD – WITH A 

o

large “country style†eat-in 

o

Garage 14’x32’, large 

o

OR…….ENDLESS POSSIBILITIES!! 

La mia domanda è prima, come faccio a identificare la codifica di questi personaggi, e secondo, come posso cambiare la codifica in mat il formato UTF8 previsto dal mio database?

MODIFICA: Per essere chiari, non vi è alcun database coinvolto in questo processo (a questo punto del processo, comunque). I dati verranno inseriti successivamente nel DB, ma al momento sto solo leggendo i dati tramite uno script PHP e stampandolo sullo schermo usando var_dump.

EDIT 2: i dati vengono tirato da un feed RET utilizzando il PHRETS libreria PHP

+2

Qual è il problema esatto? Il feed non dichiara la propria codifica, sia con '' O con le intestazioni HTTP? –

+0

@ ÁlvaroGonzález-- no, la codifica non è dichiarata-- si presume che sia UTF8 sebbene alcuni fornitori di feed non abbiano davvero ragione. – user101289

+2

Ma quei caratteri assomigliano all'UTF-8 attuale, essendo interpretati erroneamente come ISO-8859-1: -? –

risposta

7

Il problema è che la risposta UTF-8 viene trattata in modo diverso o il database non è impostato correttamente. Ecco alcuni esempi su dove questo potrebbe accadere e su come risolverlo.

Prima di utilizzare Curl

header("Content-Type: text/html; charset=utf-8"); 

Mysql (il mio.CNF)

[client] 
default-character-set=utf8 

[mysql] 
default-character-set=utf8 


[mysqld] 
collation-server = utf8_unicode_ci 
init-connect='SET NAMES utf8' 
character-set-server = utf8 

durante la creazione del database manualmente

CREATE DATABASE `your_table_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci; 

quando si utilizza framework quali Dottrina

$conn = array(
    'driver' => 'pdo_mysql', 
    'dbname' => 'test', 
    'user' => 'root', 
    'password' => '*****', 
    'charset' => 'utf8', 
    'driverOptions' => array(1002=>'SET NAMES utf8') 
); 
4

Sembra che ad un certo punto l'origine XML o di dati, che è UTF-8, è trattata come ISO-8859- 1 e convertito in UTF-8. A seconda di come si genera il feed, questo potrebbe accadere in diversi punti.

Il punto più probabile è la codifica per la connessione al database. Assicurati che sia UTF-8.

Un'altra possibilità è l'intestazione del tipo di contenuto che si invia.

4

Si prega di aggiungere il tipo di codifica del database in modo che possiamo rispondere meglio.

Al fine di rilevare il tipo di codifica di una stringa è necessario usare il mb_detect_encoding come segue:

echo mb_detect_encoding("your-string"); 

È inoltre possibile utilizzare questa funzione per convertire da un tipo di codifica a un altro,

$str = mb_convert_encoding($str, $source_encode, $destination_encode); 
Problemi correlati