web-dev-qa-db-ja.com

PHPは特殊文字を表示しません

Publish_upフィールドを取得してエコーする.phpがあります。しかし、é、è、ûなどの特殊文字は表示されません...代わりに。これを設定しましたcontent="text/html; charset=utf-8"しかし、それは問題を解決しません。

あなたの助けをありがとう!

<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

ファイルのエンコードが原因である可能性があります。 Notepad ++などの優れたテキストエディタまたはコマンドラインを使用して、エンコーディングを_UTF-8_に設定できます。 * nix OSの例:

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

アップデート1

また、MySqlエンコーディングが原因である可能性もあります。 (モデル内で)クエリを実行する前にこれらの行を追加できます。

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

_$jdb1_はJDatabaseインスタンスです。

アップデート2

奇妙な文字が返された場合、UTF-8文字にはutf8_encode(strftime())を使用

3
Farahmand

Fariの link (Update 2)に基づくと、解決策は次のとおりです。

<?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

データベースに正しい文字エンコーディングが設定されていないようです。確認するには、publish_upのデータベースで使用されている照合を確認してください。使用する正しい照合は、ウェブサイトが使用する言語によって異なりますが、一般にutf8_general_ciはほとんどの英語のウェブサイトで機能します(どうやらutf8_general_ci すべてのUTF8コーディングを適切にサポートしていない 。代わりにutf8mb4を使用することをお勧めします。)

データベースを確認するには、phpMyAdminなどのプログラムを使用することをお勧めします。

0
TryHarder