سؤال

كنت تكافح مع استبدال تراجع خلفي برمز آخر مثل ".-. فقط للإشارة إلى موضع الخزانات الخلفية لأنني لم أستطع إرسال سلسلة مثل "c xampp etc." من خلال عنوان URL كمتغير ، اعتقدت أنني سأستبدل أولاً الانزلاق الخلفي في تلك السلسلة برمز آخر ، ثم أرسل عنوان URL ، ثم استبدلها مرة أخرى إلى backslashes في ملف PHP الذي يتولى ذلك. على الرغم من أن هناك طريقة أفضل لإرسال مثل هذه السلاسل عبر عنوان URL؟ لأنه عندما أحاول برنامج نصي مثل:

$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);

اتضح إلى خطأ PHP حيث يستخدم أيضًا كمحدد ..

هل يمكن لأي شخص مساعدتي في هذا؟

شكرا لك مقدما!

راجع للشغل ، إذا كنت سأتمكن من إرسال مجموعة كاملة عبر عنوان URL ، فسيتم حل هذه المشكلة برمتها ، لكنني لا أعتقد أن هذا ممكن؟

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

المحلول

يجب إرفاق regex المستخدمة في preg_replace في زوج من المحدد ومحاولة الاستخدام أيضًا \\\ بدلاً من \ مثل:

$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);

تعديل:

لعكس الاستبدال يمكنك القيام به:

$str = preg_replace('{\.-\.}',"\\",$str);

تحتاج إلى الهروب . لمطابقة نقطة حرفية.

نصائح أخرى

استعمال urlencode()/urldecode().

echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc

راجع للشغل: هذا يبدو وكأنه عيب أمني ضخم (إرسال مسارات مطلقة حسب الطلب)


ملاحظة: preg_replace() هو للتعبيرات العادية. محاولة str_replace() المرة التالية.

راجع للشغل ، إذا كنت سأتمكن من إرسال مجموعة كاملة عبر عنوان URL ، فسيتم حل هذه المشكلة برمتها ، لكنني لا أعتقد أن هذا ممكن؟

هذا سهل. بي أتش بي:

$url = 'http://example.com/?array=' . urlencode(serialize($array)); // html
$array = unserialize($_GET['array']); // server side

أو JavaScript:

url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client
$array = json_decode($_GET['array']); // server

(بالنسبة إلى JavaScript ، عليك أن تبحث عن ما إذا كان EncodeUricomponent صحيحًا ، وتحتاج إلى مكتبة JSON الرسمية أيضًا)

إذا كنت لا تستخدم تعبيرًا منتظمًا (وهو ما لا) ، فيجب عليك استخدامه str_replace في حين أن:

$tmp_name = str_replace('\\', '.-.', $_FILES['...']);

لاحظ أنه يجب عليك الهروب من \ مع آخر \ (وإلا فسوف يهرب ما يلي ').

أما بالنسبة لخطأ المحدد - يجب إرفاق التعبيرات العادية في المحددات ، على سبيل المثال /foo/ (/ هو المحدد ، foo هو النمط). ولكن ، مرة أخرى ، ليست هناك حاجة لاستخدامك أو القلق بشأن regexps

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