tak augaさん
スミマセン。
お断りいただいているところにお返事するのもアレなのですが
Contact Form 7上で、きちんと設定して保存したあとは(ほぼ)大丈夫なんですが、
次にどこかをいじるために開くと、その時点で通常の文字に変換されてしまうので、
保存するときに、必ずエンコードして保存するように出来れば、いいんじゃないですか?
またまたちょっとした思い付きなのでスルーしていただいてかまわないのですけど、エスケープが効かないのはエスケープ文字がどこかで削除されているからではないかと。
で、Contact Form 7の管理画面で登録されたフォームデータはDBに入っているんですよね?DB上でエスケープ文字が残っていれば表示の時、残っていなければDB登録時にエスケープ文字を削除されているのではないですかね?
サーバー側の設定が変更できないとなれば、Contact Form 7の該当のエスケープ削除部分を修正するしか方法がないのかな?とも思います。
Windowsの実験環境を作れないので再現したり調査したりできないのが…残念です。
nobitaさん、度々ありがとうございます。
念のため、再度やってみました。
が、表示は出来ているのですが、
今度はユーザーからの送信時に『栃木県』『島根県』を選択すると、
入力してないことになって、入力漏れアラートが出て、
送信できませんでした。
ん〜、うまくいきません。
—–
shokun0803さん、ありがとうございます。
DB側のデータも改めてチェックしてみます。
エスケープしたり実体参照で記述したりというのは、根本的な解決にはならないと思うので、やめといたほうがいいんじゃないですか?
ホスティングサービスのサポートの人とか、相談できないんでしょうか。
やはり、根本的な解決が望ましいですよね(汗
ホスティングのサポートとは相談しているんですが、
基本、お決まりの『教えられません』ということなんですね。
で、出来るだけ今後はマニュアルなどの拡充も含めて…云々というレベルです。
問題があること自体は、理解していただけており、
対応してくださっている方の対応自体も良いんですが、
解決策そのものには言及できないと。
なかなか難しいところです。
もう少し気合でやってみて、難しそうなら
最悪はホスティングの乗り換えを進言したいところですよね…
難しいかとも思いますが。
WordPressやContact Form 7の
Windowsサーバ上での動作や設定等については、
知識のある方が少ないようであれば、
是非この機会に情報・解決策などが得られると
色んな意味で良いんだと思うのですが。
そうですかー むずかしいですね。
ログ見れたらそれだけで大分違ってくると思うんですけど、それも無理なんですかね。
今のところ、ログは見られないです〜。
どこかで出せそうな気もするので、いろいろ調べてみてますが。
こんにちは
が、表示は出来ているのですが、
今度はユーザーからの送信時に『栃木県』『島根県』を選択すると、
入力してないことになって、入力漏れアラートが出て、
送信できませんでした。
ソースのvalue 属性が空になっているという事なら、esc_attr()や、esc_html()の挙動による可能性があるかもしれません。
esc_attr()は文字列をチェックして、気に入らないと空白を返す事があると思います
以下のコードをindex.php に直接貼り付けて、空欄になるかどうかチェックしてみてはどうでしょう
<?php echo
'<div title="' . esc_attr( '栃' ) . '"' . $selected . '>' . esc_html( '栃' ) . '</div>';?>
tak augaさん
だったら、プラグインの問題というより、WordPress関数由来の問題かもしれませんね。
私のほうでは、tak augaさんの環境が再現できないので、以下のようなコードで試してみたのですが、utf-8とか、utf-7とかやるとそれなりの結果が出るんですが、
<?php
echo '<div title="' . esc_attr( mb_convert_encoding("宮","UTF-8","auto") ) . '"' . $selected . '>' . esc_html( mb_convert_encoding("宮","UTF-8","auto") ) . 'marker</div>';
echo '<div title="' . esc_attr( mb_convert_encoding("宮","UTF-8n","auto") ) . '"' . $selected . '>' . esc_html( mb_convert_encoding("宮","UTF-8n","auto") ) . 'marker</div>';?>
両方とも消えるか、化けるかの結果にしかなりませんでした
私だったら、実験的には、コンタクトフォームのmodules/select.php の80行くらいにある
option エレメントの、 esc_attr() esc_html()を一度はずして挙動を見ると思います
感では、栃が表示できるようになるので、他のエスケープ関数でどうか、チャレンジします。
例えば、
echo "1".attribute_escape( '栃' );
esc_attr_e('2 栃' );
echo esc_attr__( '4 栃' );
echo esc_attr( '6栃' );
echo js_escape( "7栃" );
echo esc_js( "7栃" );
でも、私、このプラグイン使った事ないですし、セレクト.php あった~、ちらみ めっけ
ぐらいなので、ぜんぜん違う事かもしれないです
でも、ちらみしただけでも、すごいのがわかりますね このプラグイン
mbstring 周りをいろいろ変えたり、あちこちphp設定変えたりしたけど、再現できませんでした。
nobitaさんのトライ方法を支持します。
nobitaさん、kvexさん、ありがとうございます。
試してみます。
そろそろ、結論を出さないといけないので(汗
>> tak auga さん
殆ど同じタイミング同じトラブルに遭遇している方が居て少し安心(って問題の解決には何の役にも立たないのですけど(;^_^A)。
http://ja.forums.wordpress.org/topic/6133?replies=2
私の同症状が出ている環境はMac OS X 10.6.6 / Xampp上のApache/2.2.14 (Unix) PHP/5.3.1 WordPress 3.0.4 (Ja) です。
今mysqlサーバが起動できないトラブルに見舞われていて『栃』『根』を消す実験は出来ない状態なのですが、たぶん同じ結果になりそうな気がします。
nobita さんの方法は問題の検証としては意味があると思いますが、esc_attr() や esc_html() は Contact Form 7 に限らず WordPress のいたるところで使われているので根本の解決にはなりません。今後『栃』や『根』の字をほかの場所で使わない保証はないでしょう?
もう少しがんばって絞り込むなら、esc_attr() と esc_html() で共通して使われている wp_check_invalid_utf8() を試されると良いと思います。例えば以下のようなコードをテーマのテンプレートファイルなどに仕込んだ場合になんと表示されるか。
<?php
echo wp_check_invalid_utf8( '栃木県' );
echo wp_check_invalid_utf8( '東京都' );
echo wp_check_invalid_utf8( '島根県' );
?>
もしこれで東京都しか表示されないようならさらに wp_check_invalid_utf8() 内部で使われている処理を検証できます。
勘でいうと、調査を進めるうちにどこかで PHP のバグかなにかに出くわすと思います。バグ報告が公開されているかもしれません。もしそういう情報が見つかれば、サーバーの乗り換えも理由を説明しやすくなるんじゃないでしょうか。
>> Takayuki Miyoshi さん
早速試してみました。
ウチの環境(前述)では三つも表示されました。