des.
07
2009
0

Maleïda a amb accent obert!!!

Porto tot el matí barallant-me amb una tonteria de programa que s’envia dades entre dos servidors.

El problemà està en la codificació del joc de caràcters, no s’entenen entre ells i no hi ha manera de fer una conversió més o menys automàtica.

Un servidor Sun Solaris envia les dades en utf-8 cap a un Red Hat però aquest es pensa que estan en ascii perquè “misteriosament” li arriven les dades en utf-8 però no en multibyte sinó en unibyte.  O sigui, que tinc un utf-8 però convertit a ASCII byte a byte ignorant que el utf-8 es multibyte i un caracter pot tenir de 1 a 4 bytes.

Total, que al final m’he tingut que fer la meva pròpia funció de conversió de caràcters en php ignorant totes les funcions que ja estàn pensades per fer aquestes coses rollo mb_detect_encoding(), iconv(), utf8_encode(), utf8_decode, etc…

La cosa estava tan xupada com imprimir per pantalla tots els caràcters especials i anar-los convertint un per un al que tocava. En 5 minuts tenia muntada la funció però funcionava??? Doncs no!!! Convertia correctament tots els caràcters excepte la à amb accent obert!!!

Com??? Per què??? Després de barrallar-me amb la maleïda “à” una bona estona he fet un descobriment que m’ha donat la solució, el codi ascii segons la extensió que facis servir tens un o més caràcters per definir l’espai en blanc. En el meu cas el 32 i el 160!!!

En el meu programa jo li deïa que la “Ã ” en realitat era la “à” i no funcionava perquè agafava el 32 com a codi per l’espai en blanc, enlloc del 160 que m’interessava en aquest cas. Total, que al final he pogut solucionar especificant quin dels dos possibles caràcters d’espai en blanc era l’adïent al convertir.

“Ô.chr(160)

Quedant la cosa de la següent manera:

$origen=array(‘Ã’.chr(160), “á”, “ä”, “è”, “é”,”ë”, “ì”, “í”, “ï”, “ò”, “ó”, “ö”, “ù”, “ú”, “ü”, “ç”, “ñ”, “À”, “Á”, “Ä”, “È”, “É”, “Ë”, “ÃŒ”, “Í”, “Ï”, “Ã’”, “Ó”, “Ö”, “Ù”, “Ú”, “Ãœ”, “Ç”, “Ñ”);

$desti=array(“à”, “á”, “ä”, “è”, “é”, “ë”, “ì”, “í”, “ï”, “ò”, “ó”, “ö”, “ù”, “ú”, “ü”, “ç”, “ñ”, “À”, “Á”, “Ä”, “È”, “É”, “Ë”, “Ì”, “Í”, “Ï”, “Ò”, “Ó”, “Ö”, “Ù”, “Ú”, “Ü”, “Ç”, “Ñ”);

$var = str_replace($origen, $desti, $var);

Written by in: General |

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com

Aneu a la barra d'eines