PHP - اكتشاف الحروف غير الإنجليزية وتصفية المدخلات

StackOverflow https://stackoverflow.com/questions/1776476

  •  21-09-2019
  •  | 
  •  

سؤال

هناك نموذج تعليق حيث أريد أن يكون الناس قادرين على الكتابة بلغات أجنبية أيضًا. ولكن ، على سبيل المثال ، فإن آلية ترشيح البريد العشوائي الخاص بي ستحظر شيئًا ناييف ككلمة "été" لمجرد أنها لا تحتوي على حروف العلة (حروف العلة الإنجليزية).

سؤالي هو ، عند استخدام Regex للكشف عن حروف العلة مثل:

$pattern = '/[aeiou]/';

لا أستطيع الكتابة ببساطة

$pattern = '/[aeiouéáíúó...]/';

وسيقوم الخادم بتفسير ذلك جيدًا. كيف يمكنني فعل هذا حتى يتم تفسيره جيدًا؟

للأبجدية غير اللاتينية مثل الروسية والعبرية ، هل هناك طريقة يمكنني اكتشاف اللغة التي ينتمي إليها المحتوى ويؤدي آلية مناسبة لتصفية البريد العشوائي؟

الغرض من ترشيح البريد العشوائي كله هو منع أي شيء مثل: "gjkdkgahg" أو "ttt" ، إنها صفحة مرئية للجمهور.

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

المحلول

$pattern = '/[aeiouéáíúó]/';

استخدم ال u المعدل للحصول على regex unicode-Quarting ، يجب أن ينجح ذلك ، على افتراض أنك تعمل مع سلاسل UTF-8 في جميع أنحاء التطبيق الخاص بك ، والتي يجب أن تكون حقًا.

بالنسبة إلى الحروف الهجائية غير اللاتينية مثل الروسية والعبرية ، هل هناك طريقة يمكنني اكتشاف اللغة التي ينتمي إليها المحتوى ويؤدي آلية مناسبة لتصفية البريد العشوائي؟

تم العثور على الروسية الأساسية في Unicode Range U+0400 - U+04ff ؛ حروف العلة هي. العبرية في Range U+0590 - U+05ff ولا تستخدم حروف العلة بنفس الطريقة. لا أعتقد أن اكتشاف حروف العلة مفيد بشكل رهيب ... قد يكون لديك المزيد من الحظ مع قاموس بسيط يغطي العديد من اللغات ، طالما أنك تلتزم باللغات التي لها حدود واضحة. لا يستخدم الكثير للصينية.

لا أعتقد أن هذا النوع من الأشياء هو آلية جيدة لمكافحة البريد العشوائي على الإطلاق. من المحتمل أن يكون إيجابيًا كاذبًا كما هو الحال في اكتشاف الرسائل غير المرغوب فيها ، والتي هي في كثير من الأحيان الكلمات المناسبة في كثير من الأحيان. حقول المفسد المختلفة (مدخلات CSS المخفية التي يجب تركها فارغة ولكنها لن تكون عن طريق الروبوتات) ، ومن المرجح أن تكون الرموز المميزة للاستخدام الواحد أو محدودة الوقت فعالة.

نصائح أخرى

يمكنك استخدام الطبيعية للعثور على سلاسل مع شخصيات معلمة:

<?
    if (! normalizer_is_normalized($input)) {
        // handle non-normalized input
    }
?>

إذا لزم الأمر ، يمكنك أيضًا استخدام هذه الفئة لتطبيع السلاسل للبحث عن حروف العلة:

<?
    $norm = normalizer_normalize($input);
    if (! preg_match('/[aeiou]/', $norm)) {
        // handle no-vowels in input
    }
?>

ستحتاج أيضًا إلى قراءة نموذج التطبيع الافتراضي والتأكد من تلبية متطلباتك.

حسنًا ، أنا شخصياً لا أجد مرشح البريد العشوائي مثلك فعالًا للغاية. IMO من الأفضل أن تراقب الروابط والكلمات القوية والكلمات الجنسية/المستودعات ، غالبًا ما تحتوي عليها البريد العشوائي. يمكنك تقييد الثناء بشكل صحيح فقط للمستخدمين المسجلين ، ويمكنك حذفهم كمشرف قبل الظهور ، إذا جاءوا من مصدر غير موثوق به (= من المستخدم غير المسجل).

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