CakePHPs Sanitize::clean() メソッドが正確に何をすべきかについて少し混乱しています。現在、レコードを追加しているとき、私はこれをやっています:
$this->request->data = Sanitize::clean($this->request->data, array('encode' => true, 'remove_html' => true));
ただし、& を使用してテキストエリアで Enter キーを押すと、データベースに & と \n が残ります。どうすればこれを止めることができますか? remove_html => true でこれができると思いましたか?
str_replace() まで行う必要がありますか?
また、 \n を含む一部のレコードには、表示されているビューを分割することを意味する何百もの末尾のバックスラッシュがあります。
誰かが私を正しい方向に向けることができますか? ありがとう
看護師の回答に従って更新
クリーンアップ後に以下を追加しました。
foreach ($this->request->data['Expense'] as &$expense) {
$expense['detail'] = Sanitize::stripWhitespace($expense['detail']);
}
unset($expense);
ただし、空白は削除されますが、まだ多くの空白が残ります\n\n\n\n\n\
$this->request->data のデバッグは次のとおりです。
array(
'submit' => 'Save',
'Expense' => array(
(int) 0 => array(
'date' => array(
'day' => '27',
'month' => '06',
'year' => '2013'
),
'sitename' => 'test',
'detail' => 'test test\n\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',
'ExpenseCode' => array(
'ExpenseCode' => '1'
),
'billable' => '1',
'amount' => '1',
'miles' => '',
'total' => '1',
'billable_mileage' => '',
'recorded_global_mileage_rate' => '0.4'
),
(int) 1 => array(
'date' => array(
'day' => '27',
'month' => '06',
'year' => '2013'
),
'sitename' => 'test',
'detail' => '\n\n\n\n\n\n\n\n\n\n\n\n\n\ntest',
'ExpenseCode' => array(
'ExpenseCode' => '4'
),
'billable' => '1',
'amount' => '10',
'miles' => '',
'total' => '10',
'billable_mileage' => '',
'recorded_global_mileage_rate' => '0.4'
)
),
'CashFloat' => array(
'amount' => ''
),
'ExpenseClaim' => array(
'user_id' => '3',
'claim_status_id' => '1'
)
)
ビューを壊したくないので、あなたを\n外したいと思います。
より多くの結果
Cake 関数を切り取り、そのコードを直接インラインで使用する場合でも、次のようになります。
$expense['detail'] = preg_replace('/\s{2,}/u', ' ', preg_replace('/[\n\r\t]+/', '', $expense['detail']));
私はまだループから同じ (debug($expense['detail']) を取得します:
'test 10 spaces before this then pressing enter lots \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'
また、まったく機能しない基本的なトリム()も試しました。
作業ソリューション (& を除く)
これにより、任意の数が削除されます
\n
文字列から
foreach ($this->request->data['Expense'] as &$expense) {
$expense['detail'] = str_replace("\\n", ' ', $expense['detail']);
$expense['detail'] = Sanitize::stripWhitespace($expense['detail']);
}
// Unset referance var from above loop
unset($expense);
& を保持することにしました
html_entity_decode()
ビューでエコーアウトするときに使用するだけです
それが誰かを助けることを願っています!