66 votes

Obtenir un ’ au lieu d'une apostrophe(') en PHP

J'ai essayé de convertir le texte en utf8 ou à partir de celui-ci, ce qui n'a pas semblé aider.

J'y vais :

"It’s Getting the Best of Me"

Il devrait l'être :

"It’s Getting the Best of Me"

Je reçois ces données de cette url.

3 votes

Je constate parfois ce phénomène lorsque des personnes m'envoient des messages instantanés ou des courriels depuis un Mac. J'ai hâte de voir la solution.

0 votes

Oui, je teste le code sur un Mac aussi, en utilisant MAMP Pro.

3 votes

Si cela provient d'une table MySQL, aucune des corrections données ici n'est appropriée.

91voto

Matthew Points 25748

Pour convertir en entités HTML :

<?php
  echo mb_convert_encoding(
    file_get_contents('http://www.tvrage.com/quickinfo.php?show=Surviver&ep=20x02&exact=0'),
    "HTML-ENTITIES",
    "UTF-8"
  );
?>

Voir les documents pour mb_convert_encoding pour plus d'options d'encodage.

0 votes

Cela fonctionne, mais je n'arrive pas à le faire fonctionner avec fopen.

7 votes

Une fois que vous avez obtenu le contenu du fichier que vous voulez, passez-le comme premier paramètre de la commande mb_convert_encoding() . par exemple, $text = fgets($fp); $html = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8");

0 votes

N'est plus valide.

33voto

Ben Points 9182

Assurez-vous que votre en-tête html spécifie utf8

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Cela fait généralement l'affaire pour moi (évidemment si le contenu EST utf8).

Il n'est pas nécessaire de convertir les entités en html si vous définissez le content-type.

0 votes

Ce doit être le meilleur article jamais écrit ! J'ai mis à jour mon charset en utf-8 et cela a réparé instantanément toutes mes pages gérées par la base de données. Merci pour cette solution rapide et géniale !

0 votes

Cela devrait être accepté comme la réponse parce que c'est une solution globale.

12voto

cobbal Points 37900

Votre contenu est correct ; le problème vient des en-têtes que le serveur envoie :

Connection:Keep-Alive
Content-Length:502
Content-Type:text/html
Date:Thu, 18 Feb 2010 20:45:32 GMT
Keep-Alive:timeout=1, max=25
Server:Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch
X-Powered-By:PHP/5.2.4-2ubuntu5.7

Content-Type doit être défini comme suit Content-type: text/plain; charset=utf-8 car cette page n'est pas en HTML et utilise l'encodage utf-8. Chromium sur Mac devine ISO-8859-1 et affiche les caractères que vous décrivez.

Si vous ne contrôlez pas le site, spécifiez l'encodage UTF-8 à la fonction que vous utilisez pour récupérer le contenu. Je ne suis pas assez familier avec PHP pour savoir comment faire exactement.

9voto

Tumharyyaaden Points 643

Je sais que la question a été répondue mais la mise en place de la balise meta n'a pas aidé dans mon cas et la réponse sélectionnée n'était pas assez claire, donc je voulais fournir une réponse plus simple.

Donc pour rester simple, stockez la chaîne dans une variable et traitez-la comme ceci

$TVrageGiberish = "It’s Getting the Best of Me";

$notGiberish = mb_convert_encoding($TVrageGiberish, "HTML-ENTITIES", 'UTF-8');

echo $notGiberish;

Ce qui devrait retourner ce que vous vouliez It’s Getting the Best of Me

Si vous êtes en train d'analyser quelque chose, vous pouvez effectuer la conversion tout en assignant des valeurs à une variable comme ceci, où $TVrage est un tableau contenant toutes les valeurs, XML dans cet exemple provenant d'un flux dont la balise "Title" peut contenir des caractères spéciaux tels que o .

$cleanedTitle = mb_convert_encoding($TVrage->title, "HTML-ENTITIES", 'UTF-8');

3voto

pr1001 Points 8334

Il semble que vous utilisiez des fonctions de chaîne de caractères standard sur un caractère UTF8 (') qui n'existe pas dans la base de données de l'UE. ISO 8859-1 . Vérifiez que vous utilisez Compatible avec Unicode Paramètres et fonctions PHP. Voir aussi le multi-octet fonctions de chaîne de caractères.

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