27

ファイルとデータベースの両方のライブサイトを自動的にバックアップするバックアップサーバーがあります。

ライブサイトでは、テキストは問題なく表示されますが、ミラーリングされたバージョンを表示すると、「?」と表示されます。一部のテキスト内。このテキストはニュースデータベーステーブルに保存されます。

これは、ライブサーバー上にあるものとミラーリングされたサーバー上にあるもののスクリーンショットです。

ミラーリングされたサーバーにバックアップするプロセス内で何が起こる可能性がありますか?

代替テキスト

ライブサーバーはSolarisであり、ミラーリングされたサーバーはLinux Red HatLinux5です。

4

9 に答える 9

25

次の記事が役立ちます。

10.3 文字セットと照合順序の指定

10.4 接続文字セットと照合順序

データベースに接続したら、次のコマンドを発行します。

SET NAMES 'utf8';

Web ページも UTF-8 エンコーディングを使用していることを確認します。

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

PHP には、変換に役立ついくつかの関数も用意されています。

于 2008-10-27T18:50:58.327 に答える
11

「ミラー」サーバー (問題のあるサーバー) で 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 の場合)、または小さなボックス (Internet Explorer およびOperaの場合) として表示されることです。

Microsoft Word で生成された HTML ファイルには、通常、このような文字が多数含まれています。最も一般的なのは、文字コード 160 = 0xA0 で、これは「 」に相当します。Windows-1252エンコーディングで、次のように span タグの間によく見られます。

<span style="mso-spacerun: yes">ááá </span>
于 2012-04-22T07:12:16.337 に答える
5

私はここで、ブラウザに表示され、データベースとは直接関係がないJavaScriptのソリューションを探していました...

私の場合、インターネットで見つけたテキストをコピーしてJavaScriptファイルに貼り付け、Windowsのメモ帳で保存しました。

そのJavaScriptファイルを使用するページが文字列を出力するとき、アクセント付き文字などの特殊文字の代わりに疑問符(質問に示されているものなど)がありました。

Notepad++を使用してファイルを開きました。ファイルを開いた直後に、次のスクリーンショットでわかるように、文字エンコードがANSIとして設定されていることがわかりました(フッターのマウスカーソル)。

ここに画像の説明を入力してください

この問題を解決するには、Notepad ++の[エンコード]メニューをクリックし、[ UTF-8でエンコード]を選択します。あなたは行ってもいいはずです。:)

于 2013-02-08T16:41:22.487 に答える
1

Unicode またはその他の文字セットの文字が抜け落ちていますか?

メールやその他のドキュメント形式 (Word など) からテキスト エディターにテキストをコピーすると、私が作業したサイトで同様の「奇妙な」文字が表示されることがよくあります。エディタは非 ASCII 文字を表示できますが、ブラウザは表示できません。Web サイトについては、キャラクターの HTML エンティティ コードを検索して代わりに挿入することをお勧めします... または、より標準的なものに切り替えることをお勧めします。

于 2008-10-27T18:49:13.227 に答える
1

お使いのブラウザはページのエンコーディングを正しく解釈していないため (特定の設定を強制したか、ページが正しく設定されていないため)、一部の文字を表示できません。

于 2008-10-27T18:49:20.140 に答える
1

これは、文字エンコーディングと関係があります。

ミラーリングされたサイトは、文字エンコーディングに関してメイン サーバーと同じプロパティを持っていますか?

使用しているサーバーの種類に応じて、これはサーバー プロセス自体のプロパティである場合もあれば、環境変数である場合もあります。

例えば、これが UNIX 環境なら、LANG と LC_ALL を比較してみてはいかがでしょうか。

こちらもご覧ください

于 2008-10-27T18:50:23.727 に答える
0

ミラーリングされたサーバーによって発行されている文字セットを確認してください。それとメイン サーバーには違いがあるようです。ライブ サイトは Unicode を出力しているように見えますが、ミラーはそうではありません。また、受信コンテンツ内の Unicode 文字をスクラブし、適切な HTML エンティティに置き換えることも通常は良い考えです。

あなたの特定の問題は、「スマートクォート」、「emダッシュ」、および「enダッシュ」に関するものです。&mdash;emダッシュとnダッシュを置き換えることができることは知っています&ndash;(これはデータベースの入力側で行う必要があります)。スマートクォートの正しい置き換えが何であるかはわかりません。(私は通常、すべてのカーリーな一重引用符を ' に、すべてのカーリーな二重引用符を " に置き換えるだけです ... タイポグラフィのオタクは、私を見つけたら遠慮なく撃つかもしれません。)

一部のブラウザは、他のブラウザよりもこの問題に寛容であることに注意してください。Windows 上の Internet Explorer は、これを自動的に検出して「修正」する傾向があります。Firefox およびその他のほとんどのブラウザーでは、疑問符が表示されます。

于 2008-10-27T18:51:45.127 に答える
0

私は通常、MS Word を呪ってから、次のWindows Script Hostスクリプトを実行します。

// Replace with path to a file that needs cleaning
PATH = "test.html"

var go = WScript.CreateObject("Scripting.FileSystemObject");
var content = go.GetFile(PATH).OpenAsTextStream().ReadAll();
var out = go.CreateTextFile("clean-"+PATH, true);

// Symbols
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);
于 2008-10-27T19:16:19.757 に答える