- ベストアンサー
WordPressの質問(q10207678)の続
空白改行の文字が連続してはいけないという条件で正規表現を調べたところ、空白には色々な表現があるようでそれらを 1 つ 1 つ調べ上げるのは面倒なので、Unicode 文字プロパティを使ったほうがよいと参考サイトに書かれておりました。 マルチバイト対応の文字列に対する正規表現マッチングで作成するのが良いみたいですが、コードを調べても意味が分からずどうすれば良いか迷っております… 正規表現を使っている場合 ReDoS という攻撃があるようで、セキュリティ上の対策も必要なようです。 アドバイスお願い致します。 ※参考サイト https://qiita.com/fallout/items/a13cebb07015d421fde3
- みんなの回答 (32)
- 専門家の回答
質問者が選んだベストアンサー
・カメラ画像をファイルアップロード時に非表示にするコードを追加するコードを考えてみたのですが、間違っているところはありますでしょうか? 実装してみました。 カメラ画像は非表示になったのでいいと思います。
その他の回答 (31)
- dell_OK
- ベストアンサー率13% (766/5721)
こんな感じでどうでしょうか。 ---- function Chk_StrMode($str) { // タグを除去 $str = strip_tags($str); // 連続する空白をひとつにする $str = preg_replace('/[\x20 ]++/u', "\x20", $str); // 連続する改行をひとつにする $str = preg_replace("/(\x20*[\r\n]\x20*)++/", "\n", $str); // 前後の空白を除去 $str = trim($str); // 特殊文字を HTML エンティティに変換する $str = htmlspecialchars($str); return $str; } ---- 私は正規表現にも詳しくないのでいろいろ試した結果です。 参考サイトの情報では全角スペースがうまく対応できなかったので全角スペースをそのまま記述しています。 このコードを使った空白改行テストのページを作ってみましたので、いろいろ入力して試してみてください。 http://oksample.starfree.jp/%e7%a9%ba%e7%99%bd%e6%94%b9%e8%a1%8c%e3%83%86%e3%82%b9%e3%83%88/
補足
---- function Chk_StrMode($str) { // タグを除去 $str = strip_tags($str); // 連続する空白をひとつにする $str = preg_replace('/[\x20 ]++/u', "\x20", $str); // 連続する改行をひとつにする $str = preg_replace("/(\x20*[\r\n]\x20*)++/", "\n", $str); // 前後の空白を除去 $str = trim($str); // 特殊文字を HTML エンティティに変換する $str = htmlspecialchars($str); return $str; } ---- A.修正ありがとうございます。/[\x20 ]は半角のいずれか1文字という意味でしょうか? (\x20*[\r\n]\x20*)の意味が理解できないのですが、*[\r\n]この部分はどういう意味があるのでしょうか? 別の方にアドバイス頂いた点で不安なところがあるのですが、Unicode 文字プロパティを使う必要はないでしょうか? ※アドバイス内容 改行には使用環境によって、 \n、\r、\r\n の3種があり、事前に正規化できないと面倒な事になる。 やっておかないと、「2個連続」で改行や空白で引っかかってしまう。(\r\n が引っ掛かります) 空白系文字は、全角空白以外にも、タブ ( \t )とかフォームフィード( \f )などもあります。 ※詳細 https://ja.wikipedia.org/wiki/%E7%A9%BA%E7%99%BD%E6%96%87%E5%AD%97 正規表現は自由度がある分遅い。 「Unicode 文字プロパティ」を使うと更に遅くなる。 正規表現使わずに解決できるならそちらの方をまずは考える。 ※正規表現 メタ文字一覧 https://www.megasoft.co.jp/mifes/seiki/meta.html
お礼
こちらが最新の質問になります。 質問の期限が切れており続きの質問を立てさせていただきました。アドバイスよろしくお願い致します。 https://okwave.jp/qa/q10226736.html
補足
回答ありがとうございます。 CSSを確認ページまで設定して確認後に表示ページのコードを作成する予定です。