[PHP-users 18449]Re: 【質問】namazu+PHPで日本語検索文字化けを回避するには

Youichi Iwakiri yiwakiri @ st.rim.or.jp
2003年 10月 15日 (水) 13:53:54 JST


Ikeda Noriyuki wrote in <LAW9-F110n5U9T3TGJ200001cb0 @ hotmail.com> :
>PHPにてWeb上でnamazu検索を行う為のソースを書き、
>実際に検索をかけたところ、当初は英数字による検索は
>できましたが、日本語の検索が出来ない状態でした(ソース
>コードはPHP徹底攻略 実践編のnamazu.phpを参考にしました)
>
>ここで、metaタグのcharsetをShift_JISからEUC-JPに
>変更すると、日本語での検索が可能となりました。
>
>但し、EUC-JPにするとページの日本語が化けてしまいます。

contentsの記述がShift_JISなのに、EUC-JPであると指定しているから
でしょう。
なお、namazuは、検索キーワードとして受け付けるのはEUC-JPに
限られます。Namazuの出力もEUC-JPです。

>■質問■
>対応策としては、Shift_JISのまま日本語検索が出来るように
>したいのですが、これは可能でしょうか?
>一つ一つ、変更すべき設定ファイルの個所をご教示頂きたく。
>また、不可能な場合の代替策はありますでしょうか?

formからのPOST/GETの文字コードが不定であることを考慮し、
入力(検索キーワード)をEUC-JPに変換する。

  $query = mb_convert_encodnig($_POST['query'], 'euc-jp', 'auto');

検索キーワードに全角英数字がある場合は、半角英数字にする。

  $query = nmz_codeconv_query($query);

検索結果を出力するHTML文書の文字コードに変換する

  $output_code = 'SJIS';
  $summary = mb_convert_encoding(nmz_fetch_summary($hlist, 'summary', $limit, $offset), $output_code, 'euc-jp');

こんなところでしょうか。

#PHP-dev向けな話
mbstringモジュールが有効な場合、
mbstring.internal_encoding
mbstring.http_input
mbstring.encoding_translation
mbstring.input_encoding
mbstring.output_encoding
を参照して、自動変換する機能を追加した方がいいですかね?

-- 
Youichi Iwakiri



PHP-users メーリングリストの案内