web-dev-qa-db-ja.com

テキスト内に表示される疑問符文字、これはなぜですか?

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

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

以下は、ライブサーバー上とミラーサーバー上のスクリーンショットです。

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

21
Brad

次の記事が役立ちます

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は、変換に役立ついくつかの関数も提供します。

http://us3.php.net/manual/en/function.iconv.php

http://us.php.net/mb_convert_encoding

20
IAdapter

「ミラー」サーバー(問題のあるサーバー)で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>
11
Dave Burton

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

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

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

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

enter image description here

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

3

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

1
JamShady

これは、文字エンコーディングと関係があるでしょう。

ミラー化されたサイトには、メインサーバーと同じ文字エンコードに関するプロパティがありますか?

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

たとえば、これがUNIX環境の場合、LANGまたはLC_ALLを比較してみてください。

here も参照してください

1
toolkit

Unicodeまたは他の文字セット文字が通り抜けますか?

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

0
Benjamin Lee

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

具体的な問題は、「スマートクオート」、「emダッシュ」、および「enダッシュ」に関するものです。 emダッシュを&mdash;に、nダッシュを&ndash;に置き換えることができることは知っています(データベースの入力側で行う必要があります)。スマートクオートの正しい置き換えが何であるかはわかりません。 (通常、すべてのカーリーシングルクォートを 'に、すべてのカーリーダブルクォートを "...に置き換えます。

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

0
John Rudy

通常、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);

0
Nick Van Brunt