Google Geocode: implementazione PHP - problemi di codifica dei caratteri
-
22-07-2019 - |
Domanda
Sto lavorando con i dati dell'indirizzo del Regno Unito e anche con i dati dell'indirizzo internazionale.
Devo geocodificare i dati dell'indirizzo per l'uso su una mappa di Google. Lo sto facendo usando il servizio HTTP. Vale a dire / Costruire una stringa di query e passarla a file_get_contents ($ THEURL).
Sono riuscito a geocodificare perfettamente l'80% dei dati dell'indirizzo, tuttavia quegli indirizzi in paesi come Norvegia e Sweeden che contengono caratteri speciali non restituiranno un codice geografico. Il codice restituito è 602 (impossibile trovare un indirizzo).
Esaminando la documentazione, vedo che la stringa inviata a google deve essere codificata UTF8.
Ho provato quanto segue per assicurarmi che la stringa sia codificata UTF8 / rimuovere i caratteri speciali.
1) L'uso della codifica UTF8 sulla stringa di query - questo spesso comporta la visualizzazione di caratteri non validi sullo schermo.
2) mb_check_encoding segnala che la stringa è codificata correttamente.
3) Utilizzo di una funzione per sostituire caratteri speciali per i loro eqivilenti europei (nella speranza che Google API compensi.
Qualcuno può suggerire un motivo per cui il mio metodo non funziona (se fare con la codifica o no?).
Soluzione
Devi sistematicamente esaminare ogni aspetto della codifica nel tuo sistema e definire in quale codifica si trova. Mb_detect_encoding
e le congetture non sono un buon approccio qui.
Devi controllare la codifica di:
- dati in arrivo
- pagine
- OTTIENI parametri
- connessione al database
- regole di confronto delle tabelle del database
- i file di script con cui lavori
Se si verificano caratteri non validi, è probabile che tu stia utilizzando ISO-8859-1 o qualche altra codifica non UTF-8 da qualche parte. Quando tutto è pulito UTF-8, la richiesta dovrebbe passare.
Un ottimo articolo di base è Il minimo assoluto che ogni sviluppatore di software deve assolutamente conoscere Informazioni su Unicode e set di caratteri (senza scuse!) .