Bug(バグ) #1344
The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている)
100%
説明
Overview (現象)¶
ニックネームに「<」や「'」などの記号が含まれると、送られてきたデイリーニュースのメールを表示した際に、HTMLエンティティ(< ' など)に変換されている。
また、ニックネーム以外でもHTMLエンティティ変換される記号が含まれる場合、同様の現象が起こると思われる。
refs: htmlspecialchars
http://php.net/manual/ja/function.htmlspecialchars.php
出力される文字列がこの関数を"何度か"通っていると考えられる。
再現方法¶
- ニックネームを !"#$%&'<<picomu>>?|\-!"#$ にする
- このメンバーでデイリーニュースを受信するように設定しておく
- デイリーニュースタスクを実行する
- 送られてきたデイリーニュースのニックネーム部分を見ると
!"#$%&'<<picomu>>?|\-!"#$
となっている
再現バージョン¶
- OpenPNE3.4.6-dev
他のバージョンでは未確認
Causes (原因)¶
メール本文はHTML形式でないのにも関わらず、エスケープ処理がされている。
Way to fix (修正内容)¶
メールテンプレートではHTMLのようにエスケープ処理を施す必要がない。
エスケープ処理を行っているのは sfViewParameterHolder クラスで、
sfView クラス内でこのインスタンスを生成する際に sfConfig の値を参照してエスケープの有無を決定している。
修正内容としては、sfView で生成された sfViewParameterHolder のインスタンスを、
結果を出力する前に sfViewParameterHolder::setEscaping(false) とする事で、エスケープ処理を行わないようにする。
関連するチケット
関係しているリビジョン
fixed escaping of the parameter is changed to disable. (fixes #1344)
Revert "fixed escaping of the parameter is changed to disable. (fixes #1344)"
This reverts commit b3f33e6ecd9392756738032c7ea6eeea83b00c46.
fixed fixed escaping of the parameter is changed to disable using setEscaping(). (fixes #1344)
履歴
#1 Minoru Takai がほぼ14年前に更新
- 題名 を ニックネームに「<」や「'」などの記号が含まれると、デイリーニュースのメールで文字化けてしまう から デイリーニュースのメールで、ニックネームなどに「<」や「'」などの記号があるとHTMLエンティティ変換されてしまっている に変更
#2 Rimpei Ogawa が13年以上前に更新
- 3.6 で発生するか を Yes にセット
#3 Masato Nagasawa が13年以上前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Masato Nagasawa にセット
- 対象バージョン を OpenPNE 3.7.0 にセット
メールはHTMLではないので、そもそもエスケープする必要性がないと思います。
#4 Masato Nagasawa が13年以上前に更新
- 題名 を デイリーニュースのメールで、ニックネームなどに「<」や「'」などの記号があるとHTMLエンティティ変換されてしまっている から メールに含まれるパラメータがエスケープされている に変更
#5 Masato Nagasawa が13年以上前に更新
- 題名 を メールに含まれるパラメータがエスケープされている から The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている) に変更
#6 Masato Nagasawa が13年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 b3f33e6ecd9392756738032c7ea6eeea83b00c46 で適用されました。
#7 Shogo Kawahara が13年以上前に更新
- viewクラス生成前後で、sfConfig の "sf_escaping_strategy" を操作している意図が非常に分かりにくいです。
- viewクラスからattributeHolerを取得して、それに対して、->setEscaping(false) するのが良いでしょう。
これは古いメソッドですが、
- opMailSend::setGlobalTemplate() も同様にな対応を取るべきです。
#8 Shogo Kawahara が13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
#9 Masato Nagasawa が13年以上前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 b25799b3e548d427ed77c3052406f599dbfbaedc で適用されました。
#10 Masato Nagasawa が13年以上前に更新
更新履歴 dcf9b07946e14f60f06c7635b43242ec00984add で適用されました。
#11 Shogo Kawahara が13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
#12 Yuma Sakata が12年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。