Impossible d'afficher les trémas allemands même si UTF-8 est défini dans la mesure du possible

Laissez-moi vous expliquer la situation plus près.

  1. Je travaille sur un vieux server de compagnie avec PHP 4. Il y a Windows 2000NT installé et un databaze que je peux ouvrir avec Microsoft Access 2000.
  2. Il n'y a aucune option pour définir le encoding de caractères (contrairement à phpMyAdmin), mais je peux lire correctement les caractères dans MS Access.
  3. Im extraire des données de cette database dans mes files .php et l'afficher sur mon site Web, mais les caractères comme: ü, ä, ß sont affichés mal, comme ceci:
  4. Tous les files php / html sont sauvegardés par une ancienne version de Notepad ++ comme enencoding UTF-8 et contenant: <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8">

J'ai lu une théorie sur l'enencoding de caractères, l'histoire de l'enencoding de caractères et l'UTF-8 tout-puissant qui résoudra tous vos problèmes, ce qui n'est tout simplement pas vrai. Quel pourrait être le problème?

Tout d'abord, identifiez les valeurs d'octets que vos caractères brisés ont exactement. Sans savoir que vous ne pouvez pas identifier l'enencoding comme à utiliser.

 echo urlencode($ssortingng_with_umlauts); 

Cela imprimera tous les caractères non ASCII sous forme de valeurs hexadécimales codées en pourcentage. Notez que cette fonction est destinée à d'autres fins, mais cela aidera également dans ce cas.

Puis searchz les octets dans les tables d'enencoding comme Wikipedia et soyez sûr de ce que vous avez là.

La dernière étape: Ajoutez une couche de transformation à votre logique d'access à la database qui convertit de l'enencoding que vous avez vu en UTF-8 avec les fonctions iconv.

Eh bien, j'ai trouvé la solution:

 function decode($ssortingng){ $ssortingng = urlencode($ssortingng); $ssortingng = str_replace('%DF','ß',$ssortingng); $ssortingng = str_replace('%E4','ä',$ssortingng); $ssortingng = str_replace('%F6','ö',$ssortingng); $ssortingng = str_replace('%2B','+',$ssortingng); $ssortingng = str_replace('%FC','ü',$ssortingng); $ssortingng = str_replace('%26','&',$ssortingng); $ssortingng = str_replace('%2F','/',$ssortingng); $ssortingng = str_replace('%0A','',$ssortingng); $ssortingng = str_replace('%0D','',$ssortingng); $ssortingng = str_replace('%40','@',$ssortingng); $ssortingng = str_replace('%2C',',',$ssortingng); $ssortingng = str_replace('%E1','á',$ssortingng); $ssortingng = str_replace('%D3','ó',$ssortingng); $ssortingng = str_replace('+',' ',$ssortingng); return $ssortingng; 

}

Mais n'y a-t-il pas de meilleure solution?