カテゴリ | |
---|---|
サマリ | 属性という単語で始まるページタイトルの再編集で文字化け |
バージョン | 1.4.2 |
投稿者 | A.k |
状態 | 完了 |
投稿日 | 2004-02-23 (MON) 07:15:44 |
「属性」という単語で開始するページタイトルで作成し 作成終了後に、再編集をしようとするとページタイトルが文字化けし、新規作成のようになってしまいます。
対処方法ありましたらお願いいたします。
OS:Linux(RedHat) Sever:Apache 1.3.27 PHP ver:4.3.3 PHP option: './configure' '--with-pdflib=/usr' '--with-zlib' '--with-gd' '--with-freetype-dir' '--with-jpeg-dir=/usr' '--enable-gd-native-ttf' '--enable-mbstring' '--enable-mbregex' '--with-namazu' '--with-apxs=/usr/sbin/apxs' '--with-mysql=/usr' '--with-pgsql' '--with-dom' '--with-ming=/usr' '--enable-versioning'
サマリが分かりにくかったので修正しました。
pukiwiki.orgのお試しページ(1.4.2)で試してみたところ、再現しないようです。このページで再現可能でしょうか? それとも、A.kさんのサイト特有の問題でしょうか?
お試しページで再現できませんでした。デフォルト環境にもどして再度やってみます。
サイト特有のようでした。
URLエンコード上で%C2%B0%C0%ADのものが%A1%EBになってしまっています。mbstringの関係でしょうか?
ブラウザのURLバーには、http://XXXXXX/wiki/pukiwiki.php?cmd=edit&page=%C2%B0%C0%ADと出ているのですが、Wiki中に表示される場所を示しているURLには、http://XXXXXXX/wiki/pukiwiki.php?%A1%EB と表示されています。
デフォルトのPukiWikiでも化けるということでしょうか。PukiWikiでは、Getメソッドで与えられた文字列のエンコーディングを変換しません(encode_hint フィールドがある場合は除く)。にも関わらず化けるということは、PHPが、Get/Postメソッドの入力文字列を自動変換していると思われます。phpinfo() 等で、mbstring.encoding_translationとmbstring.http_inputの設定を見て頂けますでしょうか。通常は、"Off", "pass"(変換しない)になっているはずですが、これが "On", "auto" とかになっていると化ける可能性があります。この場合の回避法としては、init.phpの最初の方にでも、以下の文を入れてみて下さい。
ini_set("mbstring.http_input", "pass");
お察しのとおり、mbstring.encoding_translationとmbstring.http_inputがそれぞれ、"On","auto"になっていました。 ただ、レンタル鯖であるため、init_setをinit.phpに書くことができません。これは、初期設定ファイルなどで指定可能なオプションでしょうか? pukiwiki.ini.phpに試してみましたができませんでしたので。
PukiWikiのinit.phpのことだと思いますが。
///////////////////////////////////////////////// // 初期設定 (文字エンコード、言語) + ini_set("mbstring.http_input", "pass"); define('SOURCE_ENCODING','EUC-JP'); define('LANG','ja'); mb_internal_encoding(SOURCE_ENCODING); mb_http_output(SOURCE_ENCODING);
ありがとうございます。勘違いしてたようです。PukiWikiのinit.phpにreimyさんの物を参考に以下のようにしてみましたが改善されませんでした。他に原因となるようなものはありますか?
///////////////////////////////////////////////// // 初期設定 (文字エンコード、言語) + ini_set("mbstring.encoding_translation", "Off"); + ini_set("mbstring.http_input", "pass"); define('SOURCE_ENCODING','EUC-JP'); define('LANG','ja'); mb_internal_encoding(SOURCE_ENCODING); mb_http_output(SOURCE_ENCODING);
.htaccessが使用できるのなら
php_flag mbstring.encoding_translation off php_value mbstring.http_input passと.htaccessに記述すればでどうでしょう?
reimyさんありがとうございました。ちゃんと編集できるようになりました。三浦克介さんも教えていただきありがとうございました。これでまたテキストの埋め込みができます。ありがとうございました。
reimyさん、フォローありがとうございます。mbstring.http_inputやmbstring.encoding_translationがデフォルト値ではないレンタルサーバーが結構あるようですね。セキュリティの為、ini_set()による上書きが禁止されている場合もあるようだし、.htaccessによる上書きも禁止の場合がありますし、エンコーディングの問題って厄介だなぁ・・・。
pukiwiki.orgのいくつかのページに、mbstring.encoding_translation="On"、mbstring.http_input="auto"が良いというような記述が何カ所かありますが、間違いです。Pukiwiki1.4では、Get/Post送信データのエンコーディングを変換すると、文字化けの可能性があります。mbstring.encoding_translation="Off" または、mbstring.http_input="pass" (いずれか一方で可)が正しいです。