لماذا بلادي بيرل آر /// إزالة أسطر جديدة؟
سؤال
وأنا أحاول لتنظيف شكل مدخلات باستخدام الحروف بيرل التالية:
sub ValidateInput {
my $input = shift;
$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\\{}[]?! -//cd;
return $input;
}
ولكن المشكلة هي أن هذه الحروف وإزالة جزءا لا يتجزأ من أحرف السطر الذي يمكن للمستخدمين الدخول في حقل ناحية النص الذي أريد أن تبقي كجزء من السلسلة. أي أفكار عن كيف يمكن تحديث هذا لمنعه من إزالة الأحرف السطر الجديد جزءا لا يتجزأ؟ ويرجع الفضل في ذلك مسبقا لمساعدتكم!
المحلول 4
وشكرا للمساعدة رجال! في نهاية المطاف قررت لمعالجة كافة البيانات في قاعدة البيانات الخاصة بنا لإزالة الطابع الذي يسبب المشكلة بحيث أن أي النص الذي تم تقديمه عن طريق استمارة التحديث لدينا (وليس تغييرها من قبل المستخدم) أن تتطابق مع ما كان في قاعدة البيانات. لكل اقتراحاتكم أود أيضا أن أضيف بعض الأحرف المسموح إضافية إلى التعابير المنطقية التحقق من الصحة.
نصائح أخرى
ولست متأكدا ما تقومون به، ولكن أظن أنك تحاول منع جميع الأحرف بين الفضاء وتيلدا في جدول ASCII، جنبا إلى جنب مع بعض الشخصيات المسافات الفارغة. وأعتقد أن معظم من قائمتك يتكثف إلى \x20-\x7e
مجموعة واحدة:
$string =~ tr/\x0a\x0d\x20-\x7e//cd;
إذا كنت تريد ضرب شخصية مثل "
(على الرغم من أنني أشك كنت تريد حقا منذ كنت تسمح الاقتباس واحد)، فقط ضبط النطاق الخاص بك:
$string =~ tr/\x0a\x0d\x20-\xa7\xa9-\x7e//cd;
وهذا قليلا من وسيلة البيزنطية من يفعل ذلك! إذا قمت بإضافة \ 012 يجب الحفاظ على أسطر جديدة.
$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\{}[]?! \012-//cd;
على application/x-www-form-urlencoded
: ل. يتم تمثيل فواصل الأسطر كما أزواج "CR LF" (أي %0D%0A
)
...
على multipart/form-data
: ل. كما هو الحال مع كل الإرسالات MIME، "CR LF" (أي %0D%0A
) يستخدم لخطوط منفصلة من البيانات
وأنا لا أعرف ما لديك في قاعدة البيانات. الآن أنت تعرف ماذا السيناريو الخاص بك فإنه يرى.
وأنت تستخدم CGI.pm
، أليس كذلك؟