web-dev-qa-db-fra.com

Se placer au lieu d'une apostrophe (') dans PHP

J'ai essayé de convertir le texte en ou depuis utf8, ce qui n'a pas semblé aider.

Je suis en train:

"It’s Getting the Best of Me"

CA devrait etre:

"It’s Getting the Best of Me"

Je reçois ces données à partir de cette URL.

48
Mint

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 docs pour mb_convert_encoding pour plus d'options de codage.

76
Matthew

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 IS utf8).

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

24
Ben

Votre contenu est bon; 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 sur Content-type: text/plain; charset=utf-8, car cette page n'est pas HTML et utilise le codage utf-8. Chrome sur Mac devine ISO-8859-1 et affiche les caractères que vous décrivez.

Si vous ne maîtrisez pas le site, spécifiez le codage UTF-8 pour la fonction que vous utilisez pour récupérer le contenu. Je ne connais pas suffisamment PHP pour savoir exactement.

12
cobbal

Je sais que la question a été répondue, mais la définition de méta-tags ne m'a pas aidé dans mon cas et la réponse sélectionnée n'était pas assez claire. Je souhaitais donc fournir une réponse plus simple.

Donc, pour rester simple, stockez string dans une variable et procédez comme cela

$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 analysez quelque chose, vous pouvez effectuer une conversion en assignant des valeurs à une variable telle que celle-ci, où $TVrage est un tableau avec toutes les valeurs, XML dans cet exemple à partir d'un flux comportant la balise "Title" pouvant contenir des caractères spéciaux tels que ‘ ou ’

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

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

  1. Ouvrez wp-config.php

  2. Commentez 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', '');
    
5
questCorp

On dirait que vous utilisez 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 et fonctions compatibles avec Unicode PHP. Voir aussi les fonctions multibyte string.

3
pr1001

J'ai regardé le lien, et il me semble que UTF-8. c'est-à-dire que dans Firefox, si vous choisissez Affichage, Encodage des caractères, UTF-8, cela apparaîtra correctement.

Donc, il vous suffit de comprendre comment obtenir votre code PHP pour le traiter en UTF-8. Bonne chance!

1
Chris Jester-Young

Juste essayer ceci

si $text contient des caractères étranges, faites ceci:

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

et vous avez terminé ..

1
Pranjal Deka

Pour fopen et file_put_contents, cela fonctionnera:

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

essaye ça : 

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

si tout semble ne pas fonctionner, cela pourrait être votre 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
ShapCyber

Nous avons eu du succès dans l'autre sens en utilisant ceci:

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

utilisez ceci 

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

au lieu de cela

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