اینکد url با تابع urlencode در php بسیار آسان و ساده است .در php توابع درونی ای برای encode و decode آدرس url وجود دارد . اینکد url قبل از ارسال داده های url به query string یا یک تابع برای انجام عملیات روی داده های این url انجام می شود . و بعد ، این داده ها بعد از دریافت توسط یک صفحه یا تابع ، باید به فرم اصلی خود دیکد (decode) شوند .
Query string چیست ؟
فرض کنید یک url به این شکل دارید
1 |
http://netparadis.com/page.php?id=5&name=php |
پس کوئری استرینک (query string) همان تکه ای از درخواست که با متد GET ارسال می شود است ، که در مثال بالا کوئری (query) شامل دو قسمت است : یک کلید (key) به اسم id که دارای مقدار ۵ است و یک کلید name که مقدار php را دارد .
1 |
?id=5&name=php |
خب حالا در php میتوانید اطلاعات فرم ها بخوانید و دسترسی به این مقادیر داشته باشید .
برای آشنایی با متغیر $_GET و $_POST و همچنین دریافت اطلاعات فرم در php کلیک کنید
با استفاده از کد زیر ما مقدار id را می گیریم و در متغییر $id ذخیره می کنیم . حالا اگر مقدار $id را چاپ کنیم عدد ۵ نمایش خواهد داد.
1 2 |
$id = $_GET['id']; echo $id; |
همچنین با آرایه $_SERVER در php می توانید تمام مقادیر را به صورت یکجا بگیرید و با تابع print_r آنرا چاپ کنید که مطمینان به صورت آرایه ای خواهد بود !
1 2 |
$qs = $_SERVER['QUERY_STRING']; print_r($qs); |
انواع URL encoding & decoding در PHP
در php دو روش برای اینکد و دیکد url وجود دارد
- Application/x-www-form-urlencode
- RFC 3956 standard type
نوع Application/x-www-form-urlencode
این نوع از اینکد url با تابع urlencode و urldecode() در php قابل انجام است . از این نوع url encoding در php پیشنهاد می شود زمانی استفاده کنید که قصد ارسال یک URL به query string توسط یک فرم را دارید .!
این توابع کاراکتر های خاص بجز (_) ، (-) و (.) را که در آدرس url آمده است را به صورت %[HEX] جایگزین می کند همچنین کاراکتر space (فاصله) را با + جایگزین می کند.
برای آشنایی با کاراکترهای خاص و رزرو شده html و اینکد آنها با تابع htmlentities و htmlspecialchars در php کلیک کنید
اگر آدرس url را به صورت اینکد شده که با تابع urlencode در php قابل انحام است ، ارسال کنیم .، هرگونه کاراکتر خاصی که در url باشد ممکن است باعث خراب شدن یا بریده شدن بقیه قسمت های url شود و نتوانیم در صفحه دریافتی مقادیر سمت راست url را به درستی آنصورت که انتظار داشتیم ، دریافت کنیم .
مثال زیر به شما نتیجه اعمال تابع urlencode در php بر روی آدرس url را نمایش می دهد .
1 2 3 4 5 6 |
$url = "http://netparadis.com/home.php?name=all about php"; $encodedUrl = urlencode($url); //returns http%3A%2F%2Fnetparadis.com%2Fhome.php%3Fname%3Dall+about+php echo $encodedUrl; //returns http://netparadis.com/home.php?name=all about php echo urldecode($encodedUrl); |
نوع استاندارد RFC 3986
یکی دیگر از توابع اینکد url در php ، rawurlencode() و rawurldecode() هستند . برخلاف نوع قبلی ، که فاصله با + جایگزین می شد ، در اینجا فاصله در url با %[HEX] جایگزین می شود .
این متد بر اساس استاندارد RFC است و استفاده از این نوع زمانی پیشنهاد می شود که قصد ساخت URL های داینامیک بنابر شرایط درخواست های سرور دارید .
کد php زیر یک مثال از استفاده دو تابع ، rawurlencode() و rawurldecode() برای url encoding در php است.
1 2 3 4 5 6 |
$url = "http://netparadis.com/home.php?name=all about php"; $encodedUrl = rawurlencode($url); //returns http%3A%2F%2Fnetparadis.com%2Fhome.php%3Fname%3Dall%20about%20php echo $encodedUrl; //returns http://netparadis.com/home.php?name=all about php echo rawurldecode($encodedUrl); |
جمع بندی
دیدید با توابع از پیش تعریف شده (built-in) در php به چه راحتی تونستیم یک url را به دو روش مختلف RFC و Application/x-www-form-urlencode اینکد کنیم . همجنین مثال هایی از تابع urlencode در php و اینکد URL با space توسط توابع rawurlencode() و rawurldecode() را دیدیم . این توابع در ارسال فرم ها به سرویس های دیگر مثل ارسال sms با php ، کار با api هایی مثل وب سرویس RESTfull یا درگاه های پرداخت بخصوص اتصال به درگاه پرداخت بانک ملت استفاده می شود . امیدوارم نهایت استفاده را برده باشید . هرگونه مشکلی در پیاده سازی کد ها داشتید از قسمت نظرات ارسال کنید . سریعا پاسخگوی سوالات شما هستیم .
موفق باشید .
سلام دوباره استاد گرامی مهندس شفیعی
واقعا راهنمایی تون عالی و بجا بود
مهندسی برازنده شماست
موفق باشید
سلام ممنون از شما.
موفق و پیروز باشید
سلام مهندس شفیعی گل وقت بخیر
تو سایت دیوار بعد از ثبت آگهی رو گزینه مدیریت آگهی که hover میکنیم انتهای url یک رشته کد شده هست که احتمالا id آگهی مورد نظر هست من بخوام مثل سایت دیوار وقتی رو گزینه مدیریت کلیک کردم id رو به این صورت ارسال کنم چیکار کنم ؟
چون اگه به روش معمولی بعرستم تو url مشخص هست کاربر میتونه با تغییر id آگهی سایر کاربران رو هم ویرایش کنه
با متد post هم وقتی inspect میگیرم و مقدار تگی که id درون اون قرار داره رو تغییر میدم پست کاربر دیگه رو میشه ویرایش کرد
چیکار باید کرد ؟
سلام. ممنون.
در صفحه ای که فرم ویرایش آگهی باز میشه شما باید همون اول کدها یه شرط بزارید و برید تو دیتابیس بگردید (دستور sql بزنید) ببینید کاربری که الان لاگین هست این آگهی برای اون داخل جدول آگهی ها ثبت شده یا نه و اگه ثبت نبود اونو با دستور header ریدایرکت کنید به صفحه اصلی.
با سلام
می خواهم با استفاده از PHP یک کل اطلاعات و تصایر و سایر المانهایی که در یک صفحه وجود دارد را یکباره دانلود کنم و بعد به صورت off line از آن استفاده کنم. چگونه می شود این کار را انجام داد؟ تقریبا تمام توابعی که می شناختم را باترکیب با لگوریتمهای مختلف تست کردم جواب درست نگرفتم. امکان دارد کمک کنید؟
سلام. از این اسکریپت میتونید استفاده کنید :
https://github.com/sidharthasingh/Website-Copier
یا
https://github.com/pagecarton/website-downloader
موفق باشید.