PHPで利用可能なマルチバイト 'preg'関数はありません。つまり、デフォルトのpreg_functionsはすべてmbで安全ですか? PHPのドキュメントでは何の言及も見つかりませんでした。PHP preg_functionsはマルチバイトで安全ですか?
答えて
mb_ereg
のようなPCREを使用する必要があるが、それはコンパイル時に指定する必要があります。 man page for PCRE 8.0から:
PCREの現在の実装は、UTF-8でエンコードされた文字列とUnicodeの一般カテゴリプロパティのサポートを含め、Perl 5.10にほぼ対応しています。ただし、UTF-8およびUnicodeサポートを明示的に有効にする必要があります。デフォルトではありません。 Unicodeテーブルは、Unicodeリリース5.1に対応しています。
PHPは現在PCRE 7.9を使用しています。システムに古いバージョンが存在する可能性があります。
PHP 5.2に付属のPCRE libを見てみると、UnicodeプロパティとUTF-8をサポートするように設定されているようです。 5.3 branchと同じです。
私はPHP 5.3.0を使用しています。これはPCREバージョン7.9を含んでいますが、preg_funcsのように見えるので、UTF8定義を含むPCRE config.hファイルを調べました。安全。 情報ありがとうございます! – Spoonface
既存のPHPインストールで使用しているPCREのバージョンを簡単に確認する方法はありますか?私のサーバはPHP 5.5を実行していますが、コンパイルされたPCREライブラリをどのようにして知ることができますか? – thatidiotguy
いいえ、そうではありません。たとえば、質問preg_match and UTF-8 in PHPを参照してください。
明確にするため、 'PREG_OFFSET_CAPTURE'は文字オフセットではなくバイトオフセットを生成します。これはPHPでの文字列処理と一貫していますが、かなり混乱する可能性があります。 –
はありません、あなたは、UTF-8および他のUnicodeエンコーディングをサポートすることができますmultibyte string functions
これはPOSIXの 'ereg'関数のマルチバイト版ですが、PCREの' preg'関数とまったく同じではありません。 – mercator
ベンSあなたは私のヒーローです:) 私はちょうどテキストを浄化し、テキストの中にäöüßを残したいと思いました。 preg_replaceはこれを正しく実行しませんでしたが、mb_eregはこれを行いました! – Nibbels
マルチバイトエンコーディングがUTF-8である限り、/ u修飾子を使用する限り、マルチバイト安全です。/uエンジンはUTF-8以外のエンコーディングをサポートしていません – hanshenrik
pcreはutf8をそのまま使用できます.'u '修飾子のドキュメントを参照してください。
イラスト(\ XC3 \ XA4は、ドイツの文字 "A" のためのUTF8エンコーディングである)
echo preg_replace('~\w~', '@', "a\xC3\xA4b");
として扱われた "\ XC3" と "\ XA4" ので、これは "@@¤の@を" エコー異なるシンボル
echo preg_replace('~\w~u', '@', "a\xC3\xA4b");
プリント "@@@" ので、 "\ XC3 \ XA4" 単一文字として処理した( 'U' は注意してください)。
本当ですか?うーん、私は正規表現の文字列にあまり熟練していない、私はあなたの考えを見るために私のpreg_コードのいくつかを投稿するかもしれない気にしない場合は? – Spoonface
u修飾語に最適ですが、私はそれを知らなかった –
私のより複雑なプリプレグの機能のいくつかを:
(1A)英数字+アンダースコアとして名を検証:
preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/',$username)
(1b)が可能UTF代替:
preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/u',$username)
(2a)をメールの確認:
preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix",$email))
(2b)が可能UTF代替:
preg_replace("/(\n){2,}/","\n\n",$str);
(3b)が可能UTF代替:
preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ixu",$email))
(3A)改行を正規化する
preg_replace("/(\n){2,}/u","\n\n",$str);
をthse変更が大丈夫に見えるのですか?
いいえ、情報を歓迎 – Spoonface
あなたの電子メールの正規表現は電子メールアドレスのどこにでも '..'を許可すると信じています。 –
- 1. PHP:マルチバイト文字列のimplode()関数は安全ですか?
- 2. PHP - "インクルード"機能は安全ですか?
- 3. PHPセッションデータは安全ですか?
- 4. JSのPHP htmlspecialcharsは安全ですか?
- 5. php:// tempは安全ですか?
- 6. PHPの 'define()'は安全ですか?
- 7. 共有メモリスレッドはPHPで安全です
- 8. signed_requestは安全ですか?
- 9. フォームは安全ですか?
- 10. PHP Mcrypt、本当に安全ですか?
- 11. JDBCは安全ですか?
- 12. 安全で安全なセッション名とは何ですか?
- 13. ブーストメッセージキューのスレッドは安全でプロセスは安全ですか?
- 14. "User.Identity.Name"は安全ですか?
- 15. PhoneGapは安全ですか?
- 16. req.refererは安全ですか?
- 17. Context.MODE_PRIVATEは安全ですか?
- 18. SecureStringは安全ですか?
- 19. window.screenは安全ですか?
- 20. Locale.setDefault()は安全ですか?
- 21. Flex:removeEventListenerは安全ですか?
- 22. HttpUtility.HtmlEncodeは安全ですか?
- 23. NetworkStreamは安全ですか?
- 24. StrToInt()は安全ですか?
- 25. カピストラーノは安全ですか?
- 26. Reduxは安全ですか?
- 27. pthread_cond_waitは完全に安全ですか?
- 28. PHP設定ファイルはHTTP上で安全ですか?
- 29. phpの中で最も安全な方法は何ですか?
- 30. jquery 'html'はphp 'htmlspecialchars'で安全ですか?
私は基本的なCの関数が90%であると確信していますが、それはPHPのバージョンを意味するものではありません。 –