سؤال

أقبل سلسلة من موجز للعرض على الشاشة التي قد تشمل أو لا تشمل بعض القمامة أريد تصفية الخروج. لا أريد تصفية الرموز العادية على الإطلاق.

القيم التي أريد إزالتها تبدو وكأنها هذه: �

هذا هو فقط هذا أريد إزالته. التكنولوجيا ذات الصلة هي PHP.

اقتراحات تقديرية.

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

المحلول 2

شكرا على الردود، والرجال. لسوء الحظ، كان لدى تلك المقدمة المشاكل التالية:

خطأ لأسباب واضحة:

ereg_replace("[^A-Za-z0-9]", "", $string);

هذه:

s/[\u00FF-\uFFFF]//

والذي يستخدم أيضا شكل Eregx المحدد من Regex أيضا لم ينجح أيضا عند تحويله إلى PREG لأن النطاق كان ببساطة كبير جدا بالنسبة إلى Regex للتعامل معه. أيضا، هناك ثقوب في هذا النطاق من شأنها أن تسمح القمامة إلى seepbish من خلال.

هذا الاقتراح:

هذه مشكلة ترميز؛ يجب أن لا تحاول تنظيف تلك الشخصيات وهمية ولكن تفهم لماذا تتلقى منها سارعت.

على الرغم من صريحة، إلا أنه ليس جيدا لأنني لا أملك أي سيطرة على كيفية ترميز البيانات التي أتلقاها. يأتي من مصدر خارجي. في بعض الأحيان هناك القمامة هناك وأحيانا لا يوجد كذلك.

لذلك، كان الحل الذي توصلت إليه مع القذرة نسبيا، ولكن في غياب شيء أكثر قوة، أقبل فقط جميع الحروف والأرقام والرموز القياسية وتخلص الباقي.

يبدو أن هذا يعمل الآن. الحل كما يلي:

$fixT = str_replace("£", "£", $string); 
$fixT = str_replace("€", "€", $fixT);
$fixT = preg_replace("/[^a-zA-Z0-9\s\.\/:!\[\]\*\+\-\|\<\>@#\$%\^&\(\)_=\';,'\?\\\{\}`~\"]/", "", $fixT);

إذا كان لدى أي شخص أي أفكار أفضل، فأنا ما زلت حريص على سماعها. هتافات.

نصائح أخرى

هذه مشكلة ترميز؛ يجب أن لا تحاول تنظيف تلك الشخصيات وهمية ولكن تفهم لماذا تتلقى منها سارعت.

حاول الحصول على بياناتك كوحيد يونيكود، أو لتقديم اتفاق مع مزود الأعلاف لك كلاهما يستخدمان نفس الترميز.

كنت تبحث عن شخصيات خارج نطاق Glyphs الذي يمكن أن يعرض خطك. يمكنك العثور على أقصى قيمة Unicode التي يمكن أن تعرض الخط الخاص بك، ثم قم بإنشاء Regex الذي سيحل محل أي شيء فوق هذه القيمة بسلسلة فارغة. مثال سيكون

s/[\u00FF-\uFFFF]//

هذا من شأنه أن تجرى أي شيء فوق الشخصية 255.

سيكون من الصعب عليك القيام به، لأنك لا تملك تعريفا صلبا لما يجب مرشحه وما يجب الاحتفاظ به. عادة ما تكون الأحرف التي تظهر كمربعات فارغة كأي شيء لا يحتوي فيه المحرف الذي تستخدمه مقابل رمزية، لذلك تعريف "الأشياء التي تظهر مثل هذا: �" غير دقيق للغاية.

سيكون من الأفضل لك أن تقرر بالضبط ما الشخصيات نكون صالح (هذا هو دائما نهج جيد على أي حال، مع أي نوع من تنظيف البيانات) وتجاهل كل شيء ليس أحد هؤلاء. PHP. منقي وظيفة هي إمكانية واحدة للقيام بذلك، وهذا يتوقف على مستوى التعقيد والترويج الذي تحتاجه.

إذا كنت غير قادر على حل المشكلة مع البيانات من الخلاصة وتحتاج إلى تصفية المعلومات، فقد يساعد ذلك:

PHP5 Filter_Input هو جيد جدا لتصفية سلاسل الإدخال وتسمح كمية عادلة من رنزوية

filter_input(input_type, variable, filter, options) 

يمكنك أيضا تصفية جميع بيانات النموذج الخاصة بك في سطر واحد إذا كانت تتطلب نفس التصفية :)

هناك بعض الأمثلة الجيدة والمزيد من المعلومات حول هذا الموضوع هنا:

http://www.w3schools.com/php/func_filter_input.asp.

يحتوي موقع PHP على مزيد من المعلومات حول الخيارات هنا: مرشحات التحقق من الصحة

إلقاء نظرة على هذا السؤال للحصول على قيمة كل بايت في سلسلة الخاص بك. (هذا يفترض ذلك التحميل الزائد متعدد البايت متوقف.)

بمجرد أن يكون لديك البايتات، يمكنك استخدامها لتحديد ما هي أحرف "القمامة" هذه بالفعل. من الممكن أن تكون نتيجة لسوء تفسير ترميز السلسلة، أو عرضها في الخط الخطأ، أو أي شيء آخر. نشرها هنا والناس يمكن أن يساعدك كذلك.

جرب هذا:

  • قم بتنزيل عينة من الأعلاف يدويا.
  • افتحه المفكرة ++. أو محرر نص آخر متطور (كيت على لينكس هو جيد لهذا).
  • حاول تغيير الترميز والتحويل من ترميز إلى آخر.

إذا وجدت إعدادا يجعل الشخصيات التي تعمل بشكل صحيح، فستحتاج إلى تشفير موقعك في هذا الترميز، أو تحويله من هذا الترميز إلى كل ما تستخدمه في موقعك.

مرحبا أصدقاء،

     try this Regular Expression to remove unicode char from the string : 

     /*\\u([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])/ 

شكرا، Chintu (prajapati.chintu.001@gmail.com)

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