web-dev-qa-db-fra.com

Php n'affiche pas les caractères spéciaux

J'ai un .php qui récupère le champ publish_up et l'écho. Mais il n’affiche pas les caractères spéciaux tels que é, è, û ... Au lieu de cela, je reçois un . J'ai mis ceci content="text/html; charset=utf-8" mais cela ne résout pas le problème.

Merci beaucoup pour votre aide!

<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">    
    </head>
<body>
      <?php                                 
      $oldLocale = setlocale(LC_TIME, 'en_US');
      echo strftime("%a %d %b %Y", strtotime($jitem1->publish_up)); 
      setlocale(LC_TIME, $oldLocale);
     ?>
</body>
</html>
5
MagTun

Cela pourrait être dû à l'encodage du fichier. Vous pouvez définir le codage sur UTF-8 À l'aide d'un bon éditeur de texte tel que Notepad ++ ou en ligne de commande. Par exemple, dans les systèmes d'exploitation * nix:

iconv -f ascii -t utf-8 "test.php" -o "utf8.test.php"

Mise à jour 1

Cela pourrait aussi être dû à votre encodage MySql. Vous pouvez ajouter ces lignes avant d'exécuter une requête (dans votre modèle):

$jdb1->execute("SET NAMES 'utf8'");
$jdb1->execute("SET CHARACTER SET utf8");
$jdb1->execute("SET SESSION collation_connection = 'latin1_general_ci'");

$jdb1 Est votre instance JDatabase.

Mise à jour 2

Si des caractères étranges sont renvoyés, utilisez utf8_encode(strftime()) pour les caractères UTF-8

3
Farahmand

Sur la base de lien (Mise à jour 2) de Fari, voici la solution:

<?php $oldLocale = setlocale(LC_TIME, 'fr_FR');
$date_string = utf8_encode(strftime('%d %B %Y', strtotime($jitem1->publish_up)));
echo $date_string;
setlocale(LC_TIME, $oldLocale); 
?>
0
MagTun

On dirait que le codage de caractères correct n'est pas défini sur votre base de données. Pour le savoir, vérifiez le classement utilisé dans la base de données pour publish_up. Le classement correct à utiliser dépend de la langue utilisée par votre site Web, mais en général, utf8_general_ci fonctionnera pour la plupart des sites Web en anglais (apparemment, utf8_general_ci ne prend pas correctement en charge le codage UTF8 , donc si votre version de mysql prend en charge Si vous préférez utiliser utf8mb4 à la place.)

Pour vérifier la base de données, je vous recommande d'utiliser un programme tel que phpMyAdmin.

0
TryHarder