2 votes

problème d'encodage de utf-8 à iso-8859-1

J'essaie de prévisualiser le dernier article d'un flux rss sur un autre site web. Le flux est codé en UTF-8, tandis que le site Web est codé en ISO-8859-1. Pour afficher le titre, j'utilise ;

 $post_title = 'Blogging – does it pay the bills?';

 echo mb_convert_encoding($post_title, 'iso-8859-1','utf-8');

 // returns: Blogging ? does it pay the bills?
 // expected: Blogging - does it pay the bills?

Notez que le trait d'union que j'attends n'est pas un signe moins normal, mais un énorme tiret. Enfin, quelques pixels de plus quand même :) Je ne sais pas comment le décrire autrement car mon clavier ne peut pas produire ce caractère...

5voto

Peter Bailey Points 62125

mb_convert_encoding ne convertit que l'encodage interne - il ne change pas réellement les séquences d'octets pour les caractères d'un jeu de caractères à un autre. Pour cela, vous devez icônev .

mb_internal_encoding( 'UTF-8' );
ini_set( 'default_charset', 'ISO-8859-1' );

$post_title = 'Blogging — does it pay the bills?'; // I used the actual m-dash here to best mimic your scenario

echo iconv( 'UTF-8', 'ISO-8859-1//TRANSLIT', $post_title );

Ou, comme d'autres l'ont dit, convertissez simplement les caractères hors gamme en entités html.

4voto

Quentin Points 325526

Je pense que vous voulez dire un tiret (-). L'ISO-8859-1 n'inclut pas ce caractère, donc vous n'aurez pas beaucoup de chance de le convertir dans cet encodage.

Vous pourriez utiliser htmlentities() mais je suggère de passer de ISO-8859-1 à UTF-8 pour la publication.

3voto

Gumbo Points 279147

Je suppose ce qui suit :

  • Votre fichier est en fait codé en UTF-8.
  • Votre éditeur interprète le fichier avec Windows-1252.

La raison en est que votre EM DASH (U+2014) est représenté par le caractère – . C'est exactement ce que vous obtenez quand vous interprétez le mot de code UTF-8 de ce caractère (0xE28094) avec Windows-1252 (0xE2= â , 0x80= , 0x94= ). Vous devez donc d'abord corriger l'encodage de votre éditeur.

Et la raison pour laquelle ? dans votre sortie, c'est que l'ISO 8859-1 ne contient pas l'élément EM DASH caractère.

1voto

Reinis I. Points 4089

C'est probablement un tiret em (U+2014), et ce que vous essayez de faire n'est pas de convertir l'encodage, car le tiret est un caractère différent. En d'autres termes, vous devez rechercher ces caractères et les remplacer manuellement.

Mieux encore, passez le site web en UTF-8. Il coïncide largement avec Latin-1 et est plus approprié pour un site web de 2009.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X