* form でtextarea を使って得た値への改行コードの処理について [#v4335644] - ページ: [[BugTrack2]] - 投稿者: 名無しさん - 優先順位: 低 - 状態: 提案 - カテゴリー: その他 - 投稿日: 2007-11-12 (月) 21:15:27 - バージョン: #contents ** メッセージ [#mffc8dcd] 外部から送られてきたデータに対する、改行コードの処理などの疑問点を挙げます -------- #comment **改行コードの処理を2重にしている [#tb321af3] %%システム系の%%昔からあるedit やpcomment などは、$vars['msg'] を使っているので、init.php で"\r" を取り除いています。&br;しかし、一部のプラグインでは$vars['msg'] に対してもう一度"\r" を取り除こうとしています。 -[[cvs:lib/init.php]] (1.54) での事前処理部分 // 整形: msg, 改行を取り除く if (isset($vars['msg'])) { $get['msg'] = $post['msg'] = $vars['msg'] = str_replace("\r", '', $vars['msg']); } [[cvs:plugin/insert.inc.php]] (1.15) function plugin_insert_action() { global $script, $vars, $cols, $rows; global $_title_collided, $_msg_collided, $_title_updated; if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); if (! isset($vars['msg']) || $vars['msg'] == '') return; $vars['msg'] = preg_replace('/' . "\r" . '/', '', $vars['msg']); [[cvs:plugin/memo.inc.php]] (1.16) function plugin_memo_action() { global $script, $vars, $cols, $rows; global $_title_collided, $_msg_collided, $_title_updated; if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); if (! isset($vars['msg']) || $vars['msg'] == '') return; $memo_body = preg_replace('/' . "\r" . '/', '', $vars['msg']); -------- #comment **改行コードの処理を行っていない物がある [#u9efb27f] $vars['msg'] 以外のものは、改行コードの処理そのものをしていない((input_filter() でしているstr_replace() を使った置換えは"\0" のみ))ので、フォームでtextarea を使っているbugtrack や、tracker は"\r" をそのままページに記録してしまう可能性がある((paraedit を使っている人はedit の$vars['original'] も対象))。&br;更新衝突時の差分作成に関しては、lib/diff.php で改行コードの処理をしているし、"\r" が記録されたとしても再編集して記録すれば消えてしまうので、今までは特に問題にはならなかったようだ。 -------- #comment **改行コードの処理がなぜ「"\r" を消す」なのか [#cfb9d951] そもそも改行コードは、LF("\n") 、CR("\r") 、CR+LF("\r\n") の3種類あるのに、&br; 外部からの入力に対しての改行コードの処理は"\r" を消すというものであり、改行コードがCR でフォームのデータが渡された時のことを考えていないのではないか、&br;と思ったのですが、フォームのデータをブラウザがどのような規格で送るかを知らないので、的外れな疑問かもしれません。 -------- #comment