ライブサイト(ファイルとデータベースの両方)を自動的にバックアップするバックアップサーバーがあります。
ライブサイトでは、テキストは正常に見えますが、ミラー化されたバージョンを表示すると、「?」が表示されます。一部のテキスト内。このテキストはニュースデータベーステーブル内に保存されます。
以下は、ライブサーバー上とミラーサーバー上のスクリーンショットです。
ミラー化されたサーバーにバックアップするプロセス内で何が起こる可能性がありますか?
次の記事が役立ちます
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
データベースに接続したら、次のコマンドを発行します。
名前の設定 'utf8';
WebページもUTF-8エンコーディングを使用していることを確認してください。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
PHPは、変換に役立ついくつかの関数も提供します。
「ミラー」サーバー(問題のあるサーバー)でApache構成ファイルを編集し、次の行をコメントアウトします。
AddDefaultCharset UTF-8
次に、Apacheを再起動します。
service httpd restart
問題は、「AddDefaultCharset UTF-8」行が.htmlファイルで指定されたContent-Typeをオーバーライドすることです。例えば。:
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
最も一般的な症状は、127を超える文字コードが疑問符付きの黒いひし形(Chrome、Safari、Firefoxの場合)または小さなボックス(IEおよびOpera)の場合)として表示されることです。通常、Microsoft Wordによって生成される文字には多くの文字が含まれます。最も一般的な文字は、Windows-1252エンコーディングの「nbsp;」に相当する文字コード160 = 0xA0です。
<span style="mso-spacerun: yes">ááá </span>
ここでは、ブラウザに表示されるJavaScriptのソリューションを探しましたが、データベースとは直接関係していません...
私の場合、インターネットで見つけたテキストをJavaScriptファイルにコピーして貼り付け、Windowsのメモ帳で保存しました。
そのJavaScriptファイルを使用するページが文字列を出力するとき、アクセント付き文字などの特殊文字の代わりに疑問符(質問に表示されるもののような)がありました。
Notepad++
を使用してファイルを開きました。ファイルを開いた直後に、次のスクリーンショットでわかるように、文字エンコードがANSI
に設定されていることがわかりました(フッター上のマウスカーソル)。
この問題を解決するには、Notepad++
のEncoding
メニューをクリックし、Encode in UTF-8
を選択します。あなたは行ってもいいはずです。 :)
ブラウザがページのエンコードを正しく解釈していないため(特定の設定を強制したか、ページが正しく設定されていないため)、一部の文字を表示できません。
これは、文字エンコーディングと関係があるでしょう。
ミラー化されたサイトには、メインサーバーと同じ文字エンコードに関するプロパティがありますか?
使用しているサーバーの種類に応じて、これはサーバープロセス自体のプロパティであるか、環境変数である可能性があります。
たとえば、これがUNIX環境の場合、LANGまたはLC_ALLを比較してみてください。
here も参照してください
Unicodeまたは他の文字セット文字が通り抜けますか?
テキストを電子メールまたは他のドキュメント形式(Wordなど)からテキストエディターにコピーすると、よく作業したサイトに同様の "奇妙な"文字が表示されるのを見てきました。エディターは非ASCII文字を表示できますが、ブラウザーは表示できません。Webサイトでは、文字のHTMLエンティティコードを検索し、代わりに挿入することをお勧めします...またはより標準的なもの。
ミラーサーバーから出力される文字セットを確認します。メインサーバーとは違いがあるようです。ライブサイトはUnicodeを出力しているように見えますが、ミラーはそうではありません。また、通常、受信コンテンツのUnicode文字をスクラブし、適切なHTMLエンティティに置き換えることをお勧めします。
具体的な問題は、「スマートクオート」、「emダッシュ」、および「enダッシュ」に関するものです。 emダッシュを—
に、nダッシュを–
に置き換えることができることは知っています(データベースの入力側で行う必要があります)。スマートクオートの正しい置き換えが何であるかはわかりません。 (通常、すべてのカーリーシングルクォートを 'に、すべてのカーリーダブルクォートを "...に置き換えます。
一部のブラウザは、この問題に関して他のブラウザよりも寛容です。Windows上のInternet Explorerは、これを自動的に検出して「修正」する傾向があります。 Firefoxおよび他のほとんどのブラウザーには疑問符が表示されます。
通常、MS Wordを呪い、次のWscriptを実行します。
//クリーニングが必要なファイルへのパスに置き換えます
PATH = "test.html"
var go = WScript.CreateObject( "Scripting.FileSystemObject");
var content = go.GetFile(PATH).OpenAsTextStream()。ReadAll();
var out = go.CreateTextFile( "clean-" + PATH、true);
//シンボル
content = content.replace(/“/g、 '"');
content = content.replace(/”/g、 '"');
content = content.replace(/ ’/ g、 "'");
content = content.replace(/ –/g、 "-");
content = content.replace(/©/ g、 "copy;");
content = content.replace(/®/ g、 "reg;");
content = content.replace(/°/ g、 "deg;");
content = content.replace(/¶/ g、 "<p>");
content = content.replace(/¿/ g、 "iquest;");
content = content.replace(/¡/ g、 'iexcl;');
content = content.replace(/¢/ g、 'cent;');
content = content.replace(/£/ g、 'pound;');
content = content.replace(/¥/ g、 'yen;');
out.Write(content);