• ベストアンサー

見た目はまったく同じなのに・・・

とあるHPを修正していまして、 修正前と修正後のレイアウトに違いがあり、どこが原因か切り分けしていたところ、 ズレる→<form id="ajaxSearch_form" action="result.html" method="post"> 正常 →<form id="ajaxSearch_form" action="result.html" method="post"> の1行に問題があるようでした。 (見た目は完全に同じなのですが) この1行以外は両ファイルともコピペして同じものにしています。 ズレているファイルに、正常の方の1行を張り付ければ正常になります。 正常のファイルに、ズレる方の1行を貼り付けるとズレてしまいます。 でも、まったく見た目は同じです。 で、2つのファイルの違いを調べるソフトを使って調べたところ ズレている方のファイルには &iuml;&raquo;&iquest;&iuml;&raquo;&iquest;&iuml;&raquo;&iquest;&iuml;&raquo;&iquest;(←で表示される特殊文字。i>>?の逆さまのような文字)<form id="ajaxSearch_form" action="result.html" method="post"> と表示されているのです。 スペースも改行もなくして試しても同じ結果でした。 どなたか原因等わかる方、よろしくお願いします。

  • HTML
  • 回答数5
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.5

> ところで、このような現象はなぜ起きるのでしょうか…? Unicodeの普及に向けた第一歩を誤ったからでしょうね。 Unicode系の文字コードとしては UTF-8 の他に UTF-16BE、UTF-16LE その他もろもろがあります。 今では UTF-8 が本命ですが、以前は UTF-16BE、UTF-16LE(またはそれに似た UCS2BE と UCS2LE) の 2本立てが本命視されていました。 BOMというのは Byte Order Mark の事で UTF-16BE と UTF-16LE を識別するためのマークです。 今では UTF-8 も識別できますが。 問題は、多くのユーザーやソフト作成者の間で BOM に関する知識が不足している事では無いでしょうか。 今回の問題も、各種の望ましく無い事が重なった結果だと思います。 (いずれかが欠けていたら顕在化しなかった) 1 BOMは、UTF-16 以外の場合には無い方が無難なのに元のテキストファイルに入ってしまった。 2 そのテキストファイルをHTMLに埋め込む処理で、BOMを削除しなかった。 (削除しないのが適切なケースは考え難い) 3 表示がくずれたブラウザは、BOMに関するいろんな条件への対応が不充分なのかも知れない。 最初から UTF-8 1本だったならBOMは誕生せずに問題の原因にもならなかったと思います。 しかし普及してしまったからには、使用上の注意をみんなが知っていなけりゃなりません。 みんなが「BOM無の UTF-8」以外の文字コードを使わなくなれば、解決するでしょう。 (usascii は、「BOM無の UTF-8」のサブセットなので使用可です)

参考URL:
http://www.atmarkit.co.jp/aig/01xml/bom.html
freakale
質問者

お礼

>問題は、多くのユーザーやソフト作成者の間で BOM に関する知識が不足している事では無いでしょうか。 おっしゃるとおりで、知識不足でした。 問題が起きてから調べるのではなく、疑問をもった時に調べるべきですね。 丁寧な解説ありがとうございました^^

その他の回答 (4)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.4

> ところで、このような現象はなぜ起きるのでしょうか…? ファイルの先頭に存在するU+FEFFはすなわちBOMですから、 編集に使用したテキストエディタが挿入したのでしょう。 例えばWindowsのメモ帳を使い、 何も文字を入力していない状態で 文字コードにUnicode、Unicode big endian、UTF-8のいずれかを指定して保存すると、 空のテキストファイルであるにもかかわらず ファイルサイズが2バイトまたは3バイトになります。 (3バイトはUTF-8の場合。) これはBOMが含まれているためです。 UTF-16はともかく、UTF-8はBOM無しが普通なのでBOMはつけない方が良いでしょう。 BOMをつけてしまうとAscii互換というUTF-8の利点も無くなってしまいます。 なお、たいていのテキストエディタでは保存時にBOMの有無を選択できます。 (メモ帳はできません。この点を含め、メモ帳なんて低機能なエディタを使う利点は無いです。)

freakale
質問者

お礼

ありがとうございます。 そういうことだったんですね。 あまり意識せずにBOMの有無を選択していました… 基本は大事だってことを再認識しました。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

読み込んでいるファイルのどこかに Unicodeのコードポイントで示すとU+FEFFとなる文字が存在しているのだと思います。 U+FEFFはZero Width No Break Spaceで、BOMとしても使われます。 この文字は幅がゼロで改行もしない文字なので存在していても表示には全く影響がなく、 ゆえにUnicodeに対応したエディタでは見ることが出来ません。 U+FEFFをUTF-8で符号化すると EF BB BF と言うバイト列になりますが、 これをLatin-1であると解釈すると、 「&#xEF;&#xBB;&#xBF;」、すなわち「&iuml;&raquo;&iquest;」 となります。 やはりUTF-8のU+FEFFが紛れ込んでいるのだと思いますよ。 > 呼び出す元のファイルには&#65279はありません。 どうやって確認しましたか? Unicodeに対応したエディタで見ているので表示されていないだけではないですか? > No.2 > Unicodeでの文字の番号と言うのは http://ja.wikipedia.org/wiki/Category:Unicode%E8%A1%A8 のことですが、 > ここにはさすがにBOMは載ってないですね。 たぶん、Zero Width No Break Spaceが載ってるのだと思います。 可読文字ではないので表示はされてないでしょうけど。

freakale
質問者

お礼

ありがとうございます! >どうやって確認しましたか? >Unicodeに対応したエディタで見ているので表示されていないだけでは>ないですか? HTMLファイルだったのでブラウザでエンコードを変更して確認してましたが、SHIFT-JISを選択しても選択されていない状態でした。 エディタでSHIFT-JISで読み直してみると、呼び出す元のファイルの先頭部分にU+FEFFが紛れ込んでいました。 その他のPHPファイルにも紛れ込んでました。 おかげで、レイアウトの問題も解消しました。^^ 本当にありがとうございました。 ところで、このような現象はなぜ起きるのでしょうか…?

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

65279 は 16進表現では feff。 BOMですね。  が HTML中に混入した事自体が何かの間違いでしょう。 削除してください。 P.S. HTML 中の ✏ や &#xffff; の書式は、常にUnicodeでの文字の番号を表します。そのHTMLの文字コードが何であるかは無関係です。 Unicodeでの文字の番号と言うのは http://ja.wikipedia.org/wiki/Category:Unicode%E8%A1%A8 のことですが、ここにはさすがにBOMは載ってないですね。 &iuml;&raquo;.... は、多分、... を UTF-8 に変換した結果をバイトに分解して表現してるんでは無いかと。  を埋め込むソフトも &iuml;&raquo;... を違いとしてレポートするソフトも、正しい使用法の結果それなら、トホホなソフトですね、きっと。

freakale
質問者

お礼

ありがとうございます。 確かに消せればそれでOKなんですが、実はPHPで動作するCMSでWEBサイトを作っていまして、UTF-8のHTMLにphpで検索窓を呼び出すと、この現象が起こっています。 呼び出す元のファイルには&#65279はありません。 呼び出す時にそれが挿入され、さらにUTF-8に変換されて&iuml;&raquo;.... となって混入されているということでしょうか? 各ブラウザでShift-jisにて表示するとすべてのブラウザに挿入されて表示しました。 ちなみに、これらの文字は IEとFireFoxでは、"見えないけれど文字があるものとして解釈" SafariとOperaは、"全く無いものとして解釈" ということになるのでしょうか?

  • MOMON12345
  • ベストアンサー率32% (1125/3490)
回答No.1

 これってUTF8か何かですかね。 文字コードが書かれていないので分からないですが、他の文字がSJISで出来ていてこのコードがあると、ブラウザには表示されませんが(実際にはそこにコードがあるので)位置はずれます。

関連するQ&A

  • フォームアクションPOSTとリンクジャンプ

    リンクタグを付した文字をクリックすると ジャンプすると同時に、ある追加情報をPOST機能で 送付したいのですが、そのような動作は可能なのでしょうか? <form action="search_result_genre.php" method="POST" name="nav" target="_self" id="nav"> <a href="search_result_genre.php"><option value="いろはに"> いろはに </option></a> </form>

    • ベストアンサー
    • HTML
  • ファイル出力で文字に

    現在プログラムからhtmlファイルを出力するプログラムを考えているのですが、出力する中で文字として「"」を出力したいのですが、どのようにしたらよいのでしょうか? たとえば "<form action="sendCheck.jsp" method="post">\n"; というのを表示したいのですが、 これでは      "<form action="sendCheck.jsp" method="post">\n";      ↑        ↑        ↑    ↑   ↑  ↑      ←---------→         ←----→    ←→ というように認識されてしまいうまくいきません。 どのようにしたらよいのでしょうか?

  • IE8 form action属性をはずすとtabindexが効かない

    こんにちは、IE8でform action属性をはずすとtabindexが効かないという問題があり、解決方法を知りたくて質問させていただきました。 formからの通常のPOSTから、jQueryで、$.postを使って、データの送信を行うようにしました。 <form method="post" action"hoge.html"> … </form> から、通常のポストを行わないように、 <form method="post"> … </form> に変更して、送受信は、正常にできるようになりましたが、 IE8の場合action属性が記述されていないと、tabindexが効かないという問題が出ています。 解決法を教えてください。

    • ベストアンサー
    • AJAX
  • phpについて 入力ホーム

    ホームページ php 入力ホームについて 初心者です。 HTML内に入力ホームに関するphpページを指定したいのですが <form action="form1.php" method="post">は指定できましたが、もう一つ<form action="form3.php" method="post">も指定したいくて、下のコードを書き込んだのですが、 <form action="form1.php" method="post"> <form action="form3.php" method="post"> 以下のようなエラーメッセージが出ます タグ<form>内に< form>を含むことができません。 どうしたら良いでしょうか?

    • 締切済み
    • PHP
  • HTML のフォームでaction="" とは何

    HTMLのFORMではたいがいaction= の部分はPHPなどのサーバースクリプトの名前が書かれているのですが、時々action="" というのを見かけます。 これはどういう意味なのでしょうか? 例としては次のようなものです。 <form id="login-id" action="" method="post"> どうかよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 文字列置換の方法

    下記の長い文字列をエディタで置換したいのですが、長くなると置換できません。このような長い文字列(?)は一般的なエディタでは置換できないものなのでしょうか。 【置換前】 <FORM ACTION="cargo.cgi" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded"> 【置換後】 <FORM ACTION="cargo.cgi" METHOD="POST">

  • IEソース表示の整理の仕方

    sea_clear_sky8 [環境] OS Win98SE PWS [質問内容] Response.writeメソッドによって、出力されて、<HTML>タグが IEの 「表示」→「ソース」では、1行で表示されてしまいます。 それを区切ってきれいにするにはどうプログラムを出力したらいいのでしょうか? 例 1行に表示される。 <form id="myForm"method="post"action="kousin.asp"><table><tr><TD>id</TD><TD>name</TD></TR><TR><TD> これを下記のように区切って表示されるようにしたいのです。 <form id="myForm" method="post" action="kousin.asp"> <table> <tr> また、ASPファイルのソース、スクリプトをIEの「表示」→「ソース」で みえないようにするにはどうしたらよろしいのでしょうか? ご教授願います。 よろしくお願いします。

  • 連動フォーム、値の送信方法について教えて下さい

    http://d.hatena.ne.jp/Mug/20060414/1145023696 上記を参考にさせて頂いています。 HTMLソースのフォーム部分を、下記のように変更。 <form action="result.php" method="post" name="fname"> 都道府県:<select id="sb1" name="s1" onchange="box2.make(this.value);"></select><br /> 市町村:<select id="sb2" name="s2"></select><br /> <input type="submit" name="" value="送信"> </form> result.phpの内容は以下です。 <?php extract($_POST); print_r($_POST); ?> s1,s2の内容は確認出来ますが、プルダウンの選択肢(例えば"神奈川"、"横浜市")の文字列をresult.phpに受け渡したいのですが、知識不足で解決出来ません。 どの様にしたら文字列(東京、神奈川など)をhtmlのフォームからresult.phpに受け渡す事が出来ますか?

  • FORMのIDを指定するとPOSTされない

    フォームの入力チェックをjavascriptで処理するため、FORMにIDをつけたのですが、ボタン押下でチェックが通れば自分自身にPOSTするような形をとっております。しかし、FORMにIDをつけてPOSTをしようとしても、何のアクションも起こりません。IDをはずせばきちんとPOSTされます。原因がわからないので、質問させていただきました。お分かりになる方、ご教授くださいますよう、お願いいたします。 <form id="corpform" method = "POST" action ="自分自身" > <input type="text" name="test" value="test" /> <input type="submit" name="add" value="追加" /> </form>

  • PHPの syntax error について

    PHPのコードを書いて、添付のスクリーンショットのようなエラーが出てきます。 コードは次のようなもので、HTML文書のフォームから送られてきた名前のファイルを消去するものです。 <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\xampp\htdocs\".$FileName; echo $FileName ; unlink($FileName); //echo "<form id='next' method='post' action='QAgmeOver.php' >"; //echo "<input type='submit' value='call QAgameOver' >"; //echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> 問題の line 18 というのは次の行です。 //echo "<form id='next' method='post' action='QAgmeOver.php' >"; unexpected T_STRING というのは、何か文字列の書き方に問題があるということらしいのですが、何をどうやって見てもエラーが消えないのでコメントアウトしてみましたが、それでも同じエラーメッセージが出てきます。 どうすればこのエラーが出なくなるのか、詳しい方がいらっしゃいましたら教えてください。お願いいたします。

    • ベストアンサー
    • PHP