We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 10105
    • 51 Posts
    毎度お世話になっています。

    先日質問させていただいた AjaxSearch1.8.1 で見えない文字 が何かがわかったので質問を変更させてもらいました。

    AjaxSearch1.8.1 で検索窓を呼び出すと、先頭部分にBOM(&#65279)が挿入されてしまいます。

    これらの文字は
    IEとFireFoxでは、"見えないけれど文字があるものとして解釈"
    SafariとOperaは、"全く無いものとして解釈" 
    しているようで、そのためレイアウトに違いが出てきてしまっている状態です。

    呼び出す元のファイルlayout.tpl.htmlには&#65279はありません。
    呼び出す時にそれが挿入され、さらにUTF-8に変換されてï».... となって混入されているようです。

    試しに各ブラウザでShift-jisにて表示するとすべてのブラウザに特殊文字が挿入されて表示しました。

    ちなみにテスト段階の別サーバーでは、正常に表示されていたので
    それらのAjaxSearch関係のファイルをコピーして使っています。

    どこか確認した方がよい箇所などありますか? よろしくおねがいします。
      • 26012
      • 324 Posts
      freakaleさんこんにちは

      AjaxSearchもエンコードまわりも詳しくないのですが、AjaxSearchは、UTF-8で照合するように
      組まれてて、ページのエンコードがUTF-8でなければ、検索対象文字をUTF-8に変換し、
      データベースから抽出した検索結果もUTF-8でなければUTF-8に変換し、双方のエンコードを
      マッチさせてから照合してるようです。

      freakaleさんの検証では、検索結果がUTF-8に変換されてるようですが、変換されること自体
      正しい動きでしょうか?ページとDB、そしてPHPの内部エンコードがUTF-8で統一されていれば、
      変換されないのが正だったりしませんでしょうか?BOMが付加されるのは、変換処理の過程が
      怪しいと思いますので、なぜ変換されるのか、という方向で調べてみてはいかがでしょう。

      以前の対応で、エンコードまわりを触ってるようですので、その辺の変更が影響してる可能性も
      あるかもしれません。classes/ajaxSearchPopup.class.inc.phpにデバッグ文を入れて、
      少しづつ追いかけてみてはいかがでしょう。

      アバウトなコメントですみません。この辺が精一杯。 ^^;
        • 10105
        • 51 Posts
        sama55さん、いつもありがとうございます。

        検索結果の文字化け関係は、なんとか問題なく検索されています。

        今回の現象は、スニペッドコードで呼び出した検索窓の部分のHTMLタグに
        BOMが付加されている状態なのです。

        どちらにしても変換処理が問題のようですね
        Quote from: sama55 at May 14, 2009, 01:58 AM

        以前の対応で、エンコードまわりを触ってるようですので、その辺の変更が影響してる可能性も
        あるかもしれません。classes/ajaxSearchPopup.class.inc.phpにデバッグ文を入れて、
        少しづつ追いかけてみてはいかがでしょう。
        デバッグ文 huhですが、順を追って始めからやり直してみようと思います。
          • 26012
          • 324 Posts
          Quote from: freakale at May 14, 2009, 03:29 AM

          スニペッドコードで呼び出した検索窓の部分のHTMLタグにBOMが付加されている状態
          ”検索窓の部分のHTMLタグ”というところがはっきり理解できないのですが・・・

          下の例は、modx0963j_beta1をさくらにサンプル付きでインストールした後に、”意図的”という
          文字列で検索させた後、窓の下に表示される検索対象文字列を含むページへのリンク文です。
          <div class="AS_ajax_result">
            <a title="意図的な拡張" href="/hoge/features/extendable.html?searched=%E6%84%8F%E5%9B%B3%E7%9A%84&advsearch=oneword&highlight=ajaxSearch_highlight+ajaxSearch_highlight1" class="AS_ajax_resultLink">意図的な拡張</a>
          </div>
          

          上記がfreakaleさんの環境では、下のようになるということでしょうか?
          (”&iuml;&raquo;....”とか”(ゴニョゴニョ)”の部分)
          <div class="AS_ajax_result">
            <a title="ï»....意図的な拡張" href="/hoge/features/extendable.html?searched=(ゴニョゴニョ)%E6%84%8F%E5%9B%B3%E7%9A%84&advsearch=oneword&highlight=ajaxSearch_highlight+ajaxSearch_highlight1" class="AS_ajax_resultLink">ï»....意図的な拡張</a>
          </div>
          

          外してたらごめんなさい。
            • 10105
            • 51 Posts
            samaさん、わかりにくくてすいません。

            スニペッドコード
            [!AjaxSearch? &ajaxSearch=`0` &AS_showResults =`0` &AS_landing=`id`!]で

            layout.tpl.htmlの
            [+as.showForm:is=`1`:then=`
            <form [+as.formId+] action="[+as.formAction+]" method="post">
                <div id="search_box">
            		<input type="hidden" name="advSearch" value="[+as.advSearch+]" />
                <label for="ajaxSearch_input">
                  <input id="ajaxSearch_input" class="cleardefault" type="text" name="search" value="[+as.inputValue+]"[+as.inputOptions+] />
                </label>
                <label for="ajaxSearch_submit">
                  <input id="ajaxSearch_submit" type="submit" name="sub" value="[+as.submitText+]" />
                </label>
                </div>
            </form>
            `+]
            <!--
            [+as.showIntro:is=`1`:then=`
            <p class="ajaxSearch_intro" id="ajaxSearch_intro">[+as.introMessage+]</p>
            `+]
            -->
            [+as.showResults:is=`1`:then=`
            [+as.results+]
            `+]

            をサイトのトップページに呼び出したときに、
            
            (ゴニョゴニョ)<form id="ajaxSearch_form"  action="result.htm" method="post">
                <div id="search_box">
            		<input type="hidden" name="advSearch" value="oneword" />
                <label for="ajaxSearch_input">
                  <input id="ajaxSearch_input" class="cleardefault" type="text" name="search" value="検索語を入力してください" onfocus="this.value=(this.value=='検索語を入力してください')? '' : this.value ;" />
                </label>
                <label for="ajaxSearch_submit">
                  <input id="ajaxSearch_submit" type="submit" name="sub" value="検索" />
                </label>
                </div>
            </form>
            
            <!--
            
            <p class="ajaxSearch_intro" id="ajaxSearch_intro">検索語を入力してください</p>
            
            -->
            
            になってしまている状態です。

            おそらく自分でいろいろ弄っての現象だと思うので、AjaxSearchインストールしなおしてみようと思います。
              • 6350
              • 421 Posts
              freakale さん、途中からの意見で混乱させるつもりはないのですが・・・

              今までの経緯から考えると「サイトの読み込みに時間がかかる」の修正あたりからこの現象が発生したような樹がするのですが・・そうあればスタイルシートを外部ファイルにしたことに原因がありそうな気がしたりしなかったり。普段使用しているエディターであればそのような凡ミスはないと思いますが・・・
              Quote from: freakale at May 13, 2009, 03:10 AM

              ちなみにテスト段階の別サーバーでは、正常に表示されていたので
              それらのAjaxSearch関係のファイルをコピーして使っています。
              AjaxSearch関係のファイルをコピーして現象が発生しないのであればスタイルシートは関係なさそうですね。

              お邪魔しました。。。
                • 10105
                • 51 Posts
                解決しました smiley

                AjaxSearchをインストールしなおしてみたら、あっさりと・・・

                ハッキリとした原因はわかりませんが、
                検索結果の文字化け問題で関連ファイルを弄った際に
                BOM付きで保存してしまっていたのかもしれません。
                まさにBOMミスです・・・すいません


                ですが、これでようやくサイトを完成させることができました。(多分)
                ありがとうございました。








                  • 26012
                  • 324 Posts
                  「テンプレートの読み込みでBOMが付く」ってことですか(早合点でした ^^;)。
                  であればこのあたりでしょうか? → http://oshiete1.goo.ne.jp/qa3183020.html

                  テンプレをいじってないとすると問題はPHPのエンコード設定(mbxxxxxx)?
                  -------------
                  と思ったら、ヒットですか。調査遅すぎ。
                  結局お役に立てず・・・申し訳ない。^^;