いつも適切なご解答をありがとうございます。
表題の件について質問させていただきます。
表題の件、EUC-JPにてサイトを制作しているのですが、
ヘッダとフッタを別htmlファイルにして、
jsファイルでインクルードさせようとしております。
ただ、インクルード用のjQueryを探しているのですが、
EUC-JPでは対応している物が見つかりません。。
jQueryサイトなど、どんな情報でもかまいませんので、
ご存知のことがありましたら教えていただければ大変助かります。
どうぞよろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
jQuery などのライブラリで ajax関連の機能を使う場合、基本読み込み対象のページは utf-8 である必要があります。
utf-8 でない場合は iframe ベースの ajax を使用することで回避できるかと思います。こちら↓の記事の終わりの方に、$.fn.iframeAjax というメソッドの定義があるので、これを事前に定義しておき..
http://d.hatena.ne.jp/cyokodog/20090616/iframe01
html に 取得したコンテンツを格納する div 要素を以下のように書いておき..
<div id="result"></div>
下記処理を実行すればできるかと思いますが、いかかでしょう?
jQuery(function($){
var dummy = $('<a href="読み込みたいhtml">dummy</a>').appendTo('body');
dummy.iframeAjax(function(doc){
$('#result').html(doc.find('body').html());
});
setTimeout(function(){
dummy.click();
setTimeout(function(){
dummy.remove();
},100);
},0);
});
ちなみに私の会社でも諸事情で Shift_JISベースのhtmlしか使えない環境があるので、上記の方法と同様の原理のプラグインを作って ajax を実現させています(IE8でも動いてます)
参考URL:http://d.hatena.ne.jp/cyokodog/20090616/iframe01
No.5
- 回答日時:
No. 3です。
object要素(もしくはiframe要素)でヘッダとフッタの内容を表示させるという手がありますね。試してみたところ、この場合はIE8でも文字化けせずに表示されました。
ただし、IE8ではJavascriptを使って追加されたobject要素は表示されないようです。したがって、htmlファイルに書き込む(静的)、あるいは、iframe要素を追加する(動的)のが現実的対応になりそうです。
度々ご回答いただきましてありがとうございます!
そうなんですよね。
IEだけ「また」うまくいかないんですよ。。
最終手段としては静的な対応を考えているのですが、
どこかで実装されていると思うんですよね。
原理的に難しいのでしょうか。。
ありがとうございました!
No.4
- 回答日時:
[quote cite="
http://www.w3.org/TR/xml/#charencoding" title="4.3.3 Character Encoding in Entities"]Each external parsed entity in an XML document may use a different encoding for its characters. All XML processors MUST be able to read entities in both the UTF-8 and UTF-16 encodings. The terms "UTF-8" and "UTF-16" in this specification do not apply to related character encodings, including but not limited to UTF-16BE, UTF-16LE, or CESU-8.
Entities encoded in UTF-16 MUST and entities encoded in UTF-8 MAY begin with the Byte Order Mark described by Annex H of [ISO/IEC 10646:2000], section 16.8 of [Unicode] (the ZERO WIDTH NO-BREAK SPACE character, #xFEFF). This is an encoding signature, not part of either the markup or the character data of the XML document. XML processors MUST be able to use this character to differentiate between UTF-8 and UTF-16 encoded documents.
In the document entity, the encoding declaration is part of the XML declaration. The EncName is the name of the encoding used.
In an encoding declaration, the values " UTF-8 ", " UTF-16 ", " ISO-10646-UCS-2 ", and " ISO-10646-UCS-4 " SHOULD be used for the various encodings and transformations of Unicode / ISO/IEC 10646, the values " ISO-8859-1 ", " ISO-8859-2 ", ... " ISO-8859- n " (where n is the part number) SHOULD be used for the parts of ISO 8859, and the values " ISO-2022-JP ", " Shift_JIS ", and " EUC-JP " SHOULD be used for the various encoded forms of JIS X-0208-1997. It is RECOMMENDED that character encodings registered (as charsets) with the Internet Assigned Numbers Authority [IANA-CHARSETS], ..
In the absence of information provided by an external transport protocol (e.g. HTTP or MIME), it is a fatal error for an entity including an encoding declaration to be presented to the XML processor in an encoding other than that named in the declaration, or for an entity which begins with neither a Byte Order Mark nor an encoding declaration to use an encoding other than UTF-8.
[/quote]
XML を読み込むプロセッサは、UTF-8 又は、UTF-16 を解釈できなければならない。
XML プロセッサは、BOM (0xFEFF) をもって、UTF-8 と UTF-16 を判別する。
(周知のことと思いますが)XML 宣言で"Shift_JIS", and " EUC-JP" 等々が指定された場合は、再読み込みされる。
HTTP 又は MIME が送られなかった場合、プロセッサにとって致命的なエラーです。(仮に宣言なしのプレーンテキストを送った場合、エラーとして扱われる。実際のところ、振る舞いは環境によりけりで、解釈したり化けたりといろいろなところに書いてあると思います)
厳密に実装されてるかどうかは、環境によると思いますが、
不安な場合は、何らかの形に変換(URL エンコード, Base64)しておけばわずらわしいことは考えなくてすみます。
参考URL:http://www.kanzaki.com/docs/sw/http-header.html
なるほど。。
ご指摘いただいた点などを確認いたしました。
>HTTP 又は MIME が送られなかった場合
とお書きになっていますが、
こちらの付帯はどのようにすればよいものでしょうか。
XML宣言しても上手くいかなかったもので。。
よろしければご解答いただければ大変助かります!
どうぞよろしくお願いいたします。
No.3
- 回答日時:
以下の3つのファイル(main.html, utf.html, euc.html)を使って(ローカルで)テストしてみました。
それぞれのファイルはEUC-JP, UTF-8, EUC-JPで保存し、それぞれ単独では文字化けなしに表示されることを確認しました。ブラウザはIE8, Firefox3, Safari4, Opera10 (すべてWindows版) です。結果は、IE8だけがEUC-JPファイルを読み込む部分で文字化けを起こしました。(.load()ではなく、$.ajax()を使うとまた少し結果が異なりますが、いずれにせよIE8は正しく表示できません。)
IE8は、.load()で読み込むファイルは、(ローカルでは)常にUTF-8であるとして解釈するのでしょうね。つまりは、サーバからファイルを送り出す時のヘッダで文字コードを指定しない限り、jQueryでどうにかなる問題ではなさそうです。
もうひとつの解決法は、全てのファイルをUTF-8で保存することでしょうか・・・。
main.html
--
<?xml version="1.0" encoding="EUC-JP"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<title>test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4. … type="text/javascript"></script>
<script>
$(function(){
$('#utf').load("utf.html");
$('#euc').load("euc.html");
});
</script>
</head>
<body>
<div id="utf">utf</div>
<div id="euc">euc</div>
</body>
</html>
--
utf.html
--
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>utf</title>
</head>
<body>
<p>これはUTF-8のファイルです。</p>
</body>
</html>
--
euc.html
--
<?xml version="1.0" encoding="EUC-JP"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<title>euc</title>
</head>
<body>
<p>これはEUC-JPのファイルです。</p>
</body>
</html>
--
丁寧にご回答いただきまして誠にありがとうございます!
いただいたとおりに試してみましたところ、
やはりIEのみ上手く表示が出来ませんでした。
EUCの文字コードでのインクルードはやはり難しいのでしょうか。
3年前くらいには割りとあったような印象があるのですが。。
ありがとうございました!
とても参考になりました!
No.2
- 回答日時:
jQuery で、というのはよくわかりませんが、、、jQuery に日本語が埋め込まれてるわけじゃないので文字コードは関係ないと思いますが、
response(Text|XML) の話でしょう。(もしくは内部で、意識せずに使ってる)
手元の環境(IE5.5~IE8, Firefox3, Opera, Safari)だけですが、ヘッダを適切に送信してやれば特に問題ないみたいですね。
ヘッダを送信しないということは、HTML で meta を指定しないのと同じ、
受け側は文字コードを知る手立てがないので、文字化けも起こるでしょう。
# ヘッダを送信しても、変換されない環境の情報は知りたいですね。
おお、ご回答ありがとうございます!
こちらをヒントに検索してみたのですが、
よく分かりませんでした。。
>手元の環境(IE5.5~IE8, Firefox3, Opera, Safari)だけですが、ヘッダを適切に送信してやれば特に問題ないみたいですね。
こちらの方法や、それが分かるようなサイトがありましたら、
簡単にでもご教授いただけませんでしょうか。。
どうぞよろしくお願いいたします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インラインフレームを自動更新...
-
連番タイトル名を基準にリンク...
-
IEとIE以外のブラウザで表...
-
jqueryを使った共通html埋め込...
-
AJAXでのリロードに関して
-
マスターページ使用時のJavascript
-
Python: TypeError
-
意味を教えてください。
-
.txtファイルの読み込み
-
CSSプルダウンメニューとjQuery...
-
inputタグ内にあるid属性の意味?
-
複数の自動スライドショー(jQue...
-
前後の「+」の意味は?
-
background をフェードしながら...
-
JavaScriptでtabindexの変更っ...
-
jQuery3 reset()が効かない。
-
【javascript文法】 prototype...
-
Ajax を Fetch API に 書き換え...
-
Javascriptを使ってQRコード読...
-
入力した文字をDBと照合させて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インラインフレームを自動更新...
-
jQueryでloadした部分に.jsが効...
-
一定時間ごとに表示内容を切り...
-
jQueryで追加した要素がマウス...
-
連番タイトル名を基準にリンク...
-
location.replaceでの移動
-
jQuery toggle() 戻るで開いた...
-
Folder.selectDialog()について
-
slideToggleを複数のボタンで適...
-
クリックテキストを次ページに表示
-
XHTMLで外部JSファイルを読み込...
-
JQueryで動的生成のスライダが...
-
<SCRIPT src="css.js">の記述位置
-
javaの変数又はデータの共有
-
フレーム内の要素へのXPATHはど...
-
リンク元のURLのパラメータでペ...
-
div要素の入れ替え。半透明イメ...
-
別ページのインラインフレーム...
-
自動で現れるTOPにもどるボタン...
-
複数の特定のURLからのみアクセ...
おすすめ情報