مشكلة بارسيورل () عندما يكون أحد المعلمات هو ورل
سؤال
أدعو النصي فب http://site.com/process.php
أن يأخذ عنوان ورل باعتبارها واحدة من المعلمات. for=
http://site.com/process.php?for=http://www.anotherwebsite.com
ثم أفعل هذا وأحاول parse_url()
ولكن بارسيورل () يعطي خطأ تحليل.
$uri = $_SERVER['REQUEST_URI']; // /process.php?for=http://www.anotherwebsite.com
parse_url($uri);
كيف يمكنني ترميز for
المعلمة إما على الجانب المرسل (في ورل) أو على الجانب المتلقي (فب) بحيث parse_url()
يفهم أنه مجرد المعلمة التي يحدث لتبدو وكأنها رابط?
المحلول
حسنا ، أولا يجب عليك urlencode()
ال for=
المعلمة ، ثم في process.php
, ، يمكنك ببساطة القيام بما يلي
$url = $_GET["for"];
$url = urldecode($url); // http://www.anotherwebsite.com
وهنا هي وظائف:http://php.net/manual/en/function.urlencode.php http://php.net/manual/en/function.urldecode.php
نصائح أخرى
قبل تضمين عنوان ورل الخاص بك باعتباره get
المعلمة ، استخدام urlencode
$full_url = 'http://site.com/process.php?for=' . urlencode('http://www.anotherwebsite.com');
هذه الوظيفة مريحة عندما ترميز سلسلة لاستخدامها في الاستعلام جزء من عنوان ورل ، باعتبارها مريحة طريقة لتمرير المتغيرات إلى التالي الصفحة.
لعكس نتيجة urlencode
, ، استخدم urldecode
.كما أشار ماريو في تعليق أدناه, $_GET
تم بالفعل فك تشفير المعلمات.