web-dev-qa-db-ja.com

utf-8の特殊文字が表示されない

ローカルテストサーバーからWebサイトをNameCheap共有ホスティングに移動しましたが、問題が発生しています-一部のページでutf-8の特殊文字が正しく表示されません(代わりに疑問符が表示されます)。すべてのデータベーステーブルと同様に、すべてのページはutf-8でエンコードされています。奇妙なことに、一見ランダムなパターンで、一部のページが正しく表示され、一部のページが正しく表示されません。

たとえば、私のインデックスページは大丈夫ですが、私のプロフィールページはそうではありません。 faq.htmlは正常に機能しますが、faq.phpに名前を変更すると機能しません。そして最も奇妙なことに、1つが正しく表示され、もう1つが表示されない2つのJQueryタブがあるページがあります!

誰かがこれを手伝ってくれますか?

24
robert

これは修正するのは本当に面倒な問題ですが、これらを試すことができます。

まず、ファイルが実際にUTF-8形式で保存されていることを確認してください。

次に、HTMLヘッダーに_<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">_が含まれていることを確認します。

PHP)スクリプトの先頭でheader('Content-Type: text/html; charset=utf-8');を呼び出すか、.htaccessファイルに_AddDefaultCharset UTF-8_を追加することもできます。

52
RCE

faq.htmlをリクエストすると、WebサーバーはファイルがUTF-8エンコーディングであることをブラウザに通知するようです。

ご使用のブラウザで、どのエンコーディングが発表され使用されているかを確認してください。その方法については、ブラウザのドキュメントを参照してください。すべてのブラウザーにはこれがあり、ほとんどの場合、メニューからアクセスできます(使用するWebサイトのエンコードを設定するため)。サーバーが返したものを確認するには、多くの場合、ページのプロパティにあります。

faq.phpをリクエストすると、ウェブサーバーはファイルが他のエンコーディングにあることをブラウザに知らせます。おそらくデフォルトのPHP構成設定に従ってcharset/encodingは与えられません。これはPHPファイルなので、ほとんどの場合、PHP設定 default_charsetドキュメント ディレクティブ:

default_charset = "UTF-8"

ホストでphp.iniを見つけて、適宜編集します。

Php.iniを使用できない場合は、 ini_setを使用してコードで変更することもできますドキュメント 関数:

ini_set('default_charset', 'UTF-8');

PHPはこれを機能させるためにヘッダーを送信する必要があり、既に送信されている場合はヘッダーを設定できないため、スクリプトの早い段階でこれを変更するよう注意してください。 。

Content-Typeヘッダー行を手動で送信することもできます。

header('Content-Type: text/html; charset=UTF-8');

さらに、出力するすべてのHTMLページのHTML <head>セクションにもこのヘッダーがあることをお勧めします。

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

これが役に立てば幸いです。

6
hakre

頭のメタタグを

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

リンク http://www.i18nqa.com/debug/utf8-debug.html を使用して、必要な記号文字を置き換えます。

次に、str_replaceのように使用します

    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);

その方法は私が使用し、たくさん助けます。ありがとう!

4
user2842936

PHPを使用し、上記のいずれも機能しなかった場合(私の場合)、utf-8エンコーディングでロケールを設定する必要があります。

このような

setlocale(LC_ALL, 'fr_CA.utf-8');
2
VVV

Utf8_encode()を使用して問題を解決します。

$ str = "kamé";

echo utf8_encode($ str);

これが誰かを助けることを願っています。

2
Kamran Sohail

問題は、ファイルのエンコーディングが同じではないためです。まず、すべてのファイルで次のコマンドを実行します。

file -i filename.* 

問題を解決するには、すべてのファイルをuft-8に変更する必要があります。コマンドiconvでそれを行うことができます:

iconv -f fromcode -t tocode filename > newfilename

例:

iconv -f iso-8859-1 -t utf-8 index.html > fixed/index.html

この後、ファイル-i fixedx/index.htmlを実行すると、ファイルがuft-8になっていることがわかります。

1
Mauricio

他のすべての答えがうまくいかなかった場合は、HTTP入力エンコーディング変換の無効化を試してください。

これはPHP extension mbstring。に関連する設定です。これは私の場合の問題でした。この設定は私のサーバーでデフォルトで有効にされていました。

1
Binod

Headタグに次の行を追加すると、問題が修正されました。

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