2010-02-18 6 views
43

J'ai essayé de convertir le texte vers ou depuis utf8, ce qui n'a pas semblé aider.Obtenir à la place d'une apostrophe (') dans PHP

Je reçois:

"It’s Getting the Best of Me" 

Il devrait être:

"It’s Getting the Best of Me" 

Je reçois ces données à partir this url.

+2

Je vois parfois quand les gens me IM ou e-mail à partir d'un Mac. Au plaisir de voir la solution. –

+0

Ouais im tester le code sur un Mac aussi, en utilisant MAMP Pro. – Mint

+0

Si cela venait d'une table MySQL, aucun des correctifs donnés ici n'est approprié. –

Répondre

66

Pour convertir aux 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 docs pour mb_convert_encoding pour plus d'options d'encodage.

+0

Cela fonctionne, mais je ne peux pas comprendre pour le faire fonctionner sur fopen – Mint

+5

Une fois que vous obtenez le contenu du fichier que vous voulez, puis passez-le en tant que premier paramètre à 'mb_convert_encoding()'. par exemple, '$ text = fgets ($ fp); $ html = mb_convert_encoding ($ text, "HTML-ENTITIES", "UTF-8"); le domaine – Matthew

+0

n'est plus valide. – mtness

1

Je regardais le lien, et il semble que UTF -8 pour moi. c'est-à-dire, dans Firefox, si vous sélectionnez View, Character Encoding, UTF-8, il s'affichera correctement. Donc, vous avez juste besoin de comprendre comment obtenir votre code PHP pour traiter cela comme UTF-8. Bonne chance!

+0

Essayez htmlspecialchars_decode –

+0

Nop, n'a pas changé du tout. – Mint

3

Il semble que vous utilisiez des fonctions de chaîne standard sur des caractères UTF8 (') qui n'existent pas dans ISO 8859-1. Vérifiez que vous utilisez les paramètres PHP et les fonctions Unicode compatible. Voir aussi les fonctions de chaîne multibyte.

12

Votre contenu est bon; le problème est avec les en-têtes du 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 réglé sur Content-type: text/plain; charset=utf-8, parce que cette page ne sont pas 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 n'avez pas le contrôle du site, spécifiez le codage comme UTF-8 à la fonction que vous utilisez pour extraire le contenu. Je ne suis pas assez familier avec PHP pour savoir exactement comment.

21

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

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

Cela fait habituellement le tour pour moi (évidemment si le contenu est UTF8).

Vous n'avez pas besoin de convertir en entités html si vous définissez le type de contenu.

+0

Cela doit être le meilleur post de tous les temps! J'ai mis à jour mon charset à utf-8 et il a instantanément réparé toutes mes pages pilotées par la base de données. Merci pour cette solution incroyablement rapide! – jlg

5

Si vous êtes ici parce que vous rencontrez des problèmes avec des caractères indésirables dans votre site WordPress, essayez ceci:

  1. Ouvrir wp-config.php

  2. Commentaire sur define('DB_CHARSET', 'utf8') et define('DB_COLLATE', '')

    /** MySQL hostname */ 
    define('DB_HOST', 'localhost'); 
    
    /** Database Charset to use in creating database tables. */ 
    //define('DB_CHARSET', 'utf8'); 
    
    /** The Database Collate type. Don't change this if in doubt. */ 
    //define('DB_COLLATE', ''); 
    
0

utilisez ce

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

au lieu de cette

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

Je sais que la question a été répondu, mais la mise en meta tag n'a pas aidé dans mon cas et la réponse sélectionnée n'a pas été assez clair, donc je voulais fournir réponse plus simple.

Donc, pour faire simple, chaîne de magasin dans une variable et un processus qui, comme ce

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

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

echo $notGiberish; 

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

Si vous analysez quelque chose, vous pouvez effectuer la conversion lors de l'attribution valeurs à une variable comme celui-ci, où $TVrage est un tableau avec toutes les valeurs, XML dans cet exemple à partir d'un flux qui a tag « titre » qui peut contenir des caractères spéciaux tels que ‘ ou ’.

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

essayez ceci:

html_entity_decode(mb_convert_encoding(stripslashes($text), "HTML-ENTITIES", 'UTF-8')) 
0

Nous avons eu succès aller dans l'autre direction en utilisant ceci:

mb_convert_encoding($text, "HTML-ENTITIES", "ISO-8859-1"); 
-1

Juste essayer cette

si $text contient charaters étranges font:

$mytext = mb_convert_encoding($text, "HTML-ENTITIES", 'UTF-8'); 

et vous avez terminé ..

1

si tout semble ne pas fonctionner, cela pourrait être la meilleure solution.

<?php 
$content="It’s Getting the Best of Me"; 
$content = str_replace("’", "&#39;", $content); 
echo $content; 
?> 

== == ou

<?php 
$content="It’s Getting the Best of Me"; 
$content = str_replace("’", "'", $content); 
echo $content; 
?> 
1

Pour fopen et file_put_contents, cela fonctionnera:

str_replace("&rsquo;", "'", htmlspecialchars_decode(mb_convert_encoding($string_to_be_fixed, "HTML-ENTITIES", "UTF-8"))); 
Questions connexes