ローカルテストサーバーからWebサイトをNameCheap共有ホスティングに移動しましたが、問題が発生しています-一部のページでutf-8の特殊文字が正しく表示されません(代わりに疑問符が表示されます)。すべてのデータベーステーブルと同様に、すべてのページはutf-8でエンコードされています。奇妙なことに、一見ランダムなパターンで、一部のページが正しく表示され、一部のページが正しく表示されません。
たとえば、私のインデックスページは大丈夫ですが、私のプロフィールページはそうではありません。 faq.htmlは正常に機能しますが、faq.phpに名前を変更すると機能しません。そして最も奇妙なことに、1つが正しく表示され、もう1つが表示されない2つのJQueryタブがあるページがあります!
誰かがこれを手伝ってくれますか?
これは修正するのは本当に面倒な問題ですが、これらを試すことができます。
まず、ファイルが実際に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
_を追加することもできます。
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">
...
これが役に立てば幸いです。
頭のメタタグを
<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);
その方法は私が使用し、たくさん助けます。ありがとう!
PHPを使用し、上記のいずれも機能しなかった場合(私の場合)、utf-8エンコーディングでロケールを設定する必要があります。
このような
setlocale(LC_ALL, 'fr_CA.utf-8');
Utf8_encode()を使用して問題を解決します。
$ str = "kamé";
echo utf8_encode($ str);
これが誰かを助けることを願っています。
問題は、ファイルのエンコーディングが同じではないためです。まず、すべてのファイルで次のコマンドを実行します。
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になっていることがわかります。
他のすべての答えがうまくいかなかった場合は、HTTP入力エンコーディング変換の無効化を試してください。
これはPHP extension mbstring。に関連する設定です。これは私の場合の問題でした。この設定は私のサーバーでデフォルトで有効にされていました。
Headタグに次の行を追加すると、問題が修正されました。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">