سؤال

لا توجد وظائف "preg" المتعددة المتاحة في PHP ، فهل هذا يعني أن preg_functions الافتراضية كلها آمنة MB؟ لا يمكن العثور على أي ذكر في وثائق PHP.

هل كانت مفيدة؟

المحلول

يمكن لـ PCRE دعم UTF-8 وغيرها من ترميزات Unicode ، ولكن يجب تحديدها في وقت الترجمة. من صفحة MAN لـ PCRE 8.0:

يتوافق التنفيذ الحالي لـ PCRE تقريبًا مع PERL 5.10 ، بما في ذلك دعم السلاسل المشفرة UTF-8 وخصائص الفئة العامة Unicode. ومع ذلك ، يجب تمكين دعم UTF-8 و Unicode بشكل صريح ؛ إنه ليس الافتراضي. تتوافق جداول Unicode مع الإصدار Unicode 5.1.

PHP يستخدم حاليا PCRE 7.9; ؛ قد يحتوي نظامك على إصدار أقدم.

إلقاء نظرة على PCRE LIB يأتي ذلك مع PHP 5.2 ، ويبدو أنه تم تكوينه لدعم خصائص Unicode و UTF-8. نفس الشيء ل 5.3 فرع.

نصائح أخرى

يدعم PCRE UTF8 خارج المربع ، راجع وثائق المعدل "U".

التوضيح ( xc3 xa4 هو ترميز UTF8 للحرف الألماني "ä")

  echo preg_replace('~\w~', '@', "a\xC3\xA4b");

هذا يردد "¤@" لأن " xc3" و " xa4" عوملوا كرموز متميزة

  echo preg_replace('~\w~u', '@', "a\xC3\xA4b");

(لاحظ "u") يطبع "@" لأن " XC3 XA4" عومل كحرف واحد.

لا ليسو كذلك. انظر السؤال preg_match و UTF-8 في PHP علي سبيل المثال.

لا ، تحتاج إلى استخدام وظائف سلسلة متعددة مثل mb_ereg

بعض وظائف Preg الأكثر تعقيدًا:

(1 أ) التحقق من صحة اسم المستخدم باعتباره الأبجدي الرقمي + السطحي:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/',$username) 

(1 ب) بديل 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))

(2 ب) بديل UTF ممكن:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ixu",$email))

(3A) تطبيع الخطوط الجديدة:

preg_replace("/(\n){2,}/","\n\n",$str);

(3 ب) بديل UTF ممكن:

preg_replace("/(\n){2,}/u","\n\n",$str);

هل تبدو التغييرات على ما يرام؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top