পিএইচপি-তে ইউআরএল সঠিকভাবে একটি স্ট্রিং এনকোড করবেন কীভাবে?


98

আমি একটি অনুসন্ধান পৃষ্ঠা তৈরি করছি, যেখানে আপনি একটি অনুসন্ধান ক্যোয়ারী টাইপ করেন এবং ফর্মটি জমা দেওয়া হয় search.php?query=your query। কোন পিএইচপি ফাংশনটি সবচেয়ে ভাল এবং এটি অনুসন্ধান কোয়েরি এনকোডিং / ডিকোডিংয়ের জন্য আমার ব্যবহার করা উচিত?


4
আপনি কোন সমস্যা অনুভব করেন? ব্রাউজার এবং পিএইচপি এই ইতিমধ্যে স্বয়ংক্রিয়ভাবে পরিচালনা করা উচিত (উদাঃ foo barএকটি পাঠ্য ক্ষেত্রে রাখা, foo+barইউআরএল তৈরি করে )।
ফেলিক্স ক্লিং

@ ফেলিক্স আমি সন্ধানকারী স্ক্রিপ্টটি ব্যবহার করে কল করতে যাচ্ছিfile_get_contents
ক্লিক করুন

উত্তর:


185

ইউআরআই প্রশ্নের জন্য urlencode/ ব্যবহার করুন urldecode; অন্য কিছু ব্যবহারের জন্য rawurlencode/ rawurldecode

মধ্যে পার্থক্য urlencodeএবং rawurlencodeযে


অ্যাপ্লিকেশন / x-www-form-urlencoded পার্সেন্ট-এনকোডিংয়ের একটি বিশেষ বৈকল্পিক এবং কেবলমাত্র HTML ফর্ম ডেটা এনকোড করার জন্য প্রয়োগ করা হয়।
গম্বো

4
@ ক্লিক আপভোট: তাদের সেভাবে তুলনা করা যায় না। আবেদন / এক্স-WWW-ফর্ম-urlencoded বিন্যাস হল শতাংশ-এনকোডিং ছাড়া স্থান দিয়ে এনকোড করা আছে বিন্যাস +পরিবর্তে %20। এবং তার পাশাপাশি, অ্যাপ্লিকেশন / x-www-form-urlencoded ফর্ম ডেটা এনকোড করতে ব্যবহৃত হয় যখন শতাংশ-এনকোডিংয়ের আরও সাধারণ ব্যবহার থাকে।
গম্বো

13
Rawurlencode () জাভাস্ক্রিপ্ট ডিকোডিউরিআই () ফাংশনের সাথে সামঞ্জস্যপূর্ণ
ক্লাইভ

এই নিয়মটি কি সর্বদা অভিজ্ঞতাশীল হয়? আমি বলতে চাইছি, যখন আমার কোনও ক্যোয়ারী স্ট্রিং এনকোড করা দরকার তখন আমি সর্বদা ব্যবহার করি urldecode। তারপরে, ইউআরআই পাথ (উদাহরণস্বরূপ /a/path with spaces/) এবং ইউআরআই খণ্ড (উদাঃ #fragment) সম্পর্কে কী। আমার কি সবসময় rawurldecodeএই দুজনের জন্য ব্যবহার করা উচিত ?
টোনিক্স

থাম্বের একটি ভাল নিয়ম হ'ল পাথের জন্য (আমার / আমার% 20 ফোল্ডার / লাইক) সাথে যান rawurlencode; তবে পোস্ট এবং জিইটি ফিল্ডগুলির সাথে যান urlencode(লাইক /? ফোল্ডার = আমার + ফোল্ডার) `
সুরেশ ফালাহাটি

23

ধূর্ততার নামক urlencode () এবং urldecode ()

যাইহোক, যদি আপনি ব্যবহার করতে হবে করা উচিত নয় urldecode()যে প্রদর্শিত ভেরিয়েবল উপর $_POSTএবং $_GET


4
আপনি কী দয়া করে বিশদভাবে বলতে পারবেন কেন urldecode () $ _POST এর সাথে ব্যবহার করা উচিত নয়। কারণ আমি বহু বছর ধরে কোনও সমস্যা ছাড়াই এটি করে চলেছি।
SID

আমার কি "name=b&age=c&location=d"এজ্যাক্সের মাধ্যমে পিএইচপি ফাইলটিতে পাঠানো বেসিক প্যারামিটারগুলি (যেমন ) এনকোড করা দরকার ?
oldboy

11

এটি আমার ব্যবহারের কেস, যার জন্য ব্যতিক্রমী পরিমাণে এনকোডিং দরকার। হতে পারে আপনি এটির অনুমান বলে মনে করেন, তবে আমরা এটি উত্পাদন চালিয়ে যাচ্ছি। কাকতালীয়ভাবে, এটি প্রতিটি ধরণের এনকোডিংকে কভার করে, তাই আমি টিউটোরিয়াল হিসাবে পোস্ট করছি।

মামলার বিবরণ ব্যবহার করুন

কেউ আমাদের ওয়েবসাইটে একটি প্রিপেইড উপহার কার্ড ("টোকেন") কিনেছিলেন। টোকেনগুলির তাদের খালাস করার জন্য সম্পর্কিত URL রয়েছে। এই গ্রাহকটি অন্য কারও কাছে URL ইমেল করতে চায়। আমাদের ওয়েব পৃষ্ঠায় একটি mailtoলিঙ্ক রয়েছে যা তাদের এটি করতে দেয়।

পিএইচপি কোড

// The order system generates some opaque token
$token = 'w%a&!e#"^2(^@azW';

// Here is a URL to redeem that token
$redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token);

// Actual contents we want for the email
$subject = 'I just bought this for you';
$body = 'Please enter your shipping details here: ' . $redeemUrl;

// A URI for the email as prescribed
$mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body);

// Print an HTML element with that mailto link
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>';

দ্রষ্টব্য: উপরেরটি ধরে নেওয়া হয় আপনি কোনও text/htmlনথিতে আউটপুট দিচ্ছেন । যদি আপনার আউটপুট মিডিয়া টাইপ হয় text/jsonতবে কেবল ব্যবহার করুন $retval['url'] = $mailToUri;কারণ আউটপুট এনকোডিং দ্বারা পরিচালিত হয় json_encode()

পরীক্ষা ক্ষেত্রে

  1. কোনও পিএইচপি পরীক্ষামূলক সাইটে কোড চালান ( আমার এখানে উল্লেখ করা উচিত এমন কোনও ক্যানোনিকাল আছে? )
  2. লিঙ্কে ক্লিক করুন
  3. ইমেল প্রেরণ করুন
  4. ইমেল পান
  5. যে লিঙ্কটি ক্লিক করুন

তোমার দেখা উচিত:

"args": {
  "token": "w%a&!e#\"^2(^@azW"
}, 

এবং অবশ্যই এটি $tokenউপরের জেএসওএন প্রতিনিধিত্ব ।


সমান, এবং কম শব্দার্থিকভাবে (কারণ mailto:এইচটিটিপি নয়), আপনি ব্যবহার করতে পারেন $mailToUri 'mailto:?' . http_build_query(['subject'=>$subject, 'body'=>$body], null, '&', PHP_QUERY_RFC3986);
উইলিয়াম এন্টারিকেন

0

আপনি ইউআরএল এনকোডিং ফাংশন ব্যবহার করতে পারেন পিএইচপি এর রয়েছে

rawurlencode() 

ফাংশন

এএসপি আছে

Server.URLEncode() 

ফাংশন

জাভাস্ক্রিপ্ট আপনি ব্যবহার করতে পারেন

encodeURIComponent() 

ফাংশন


0

আপনি কোন ধরণের আরএফসি স্ট্যান্ডার্ড এনকোডিংটি সম্পাদন করতে চান তার উপর ভিত্তি করে বা আপনার এনকোডিংটি কাস্টমাইজ করার প্রয়োজন হলে আপনি নিজের শ্রেণি তৈরি করতে চাইতে পারেন।

/**
 * UrlEncoder make it easy to encode your URL
 */
class UrlEncoder{
    public const STANDARD_RFC1738 = 1;
    public const STANDARD_RFC3986 = 2;
    public const STANDARD_CUSTOM_RFC3986_ISH = 3;
    // add more here

    static function encode($string, $rfc){
        switch ($rfc) {
            case self::STANDARD_RFC1738:
                return  urlencode($string);
                break;
            case self::STANDARD_RFC3986:
                return rawurlencode($string);
                break;
            case self::STANDARD_CUSTOM_RFC3986_ISH:
                // Add your custom encoding
                $entities = ['%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D'];
                $replacements = ['!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]"];
                return str_replace($entities, $replacements, urlencode($string));
                break;
            default:
                throw new Exception("Invalid RFC encoder - See class const for reference");
                break;
        }
    }
}

উদাহরণ ব্যবহার করুন:

$dataString = "https://www.google.pl/search?q=PHP is **great**!&id=123&css=#kolo&email=me@liszka.com)";

$dataStringUrlEncodedRFC1738 = UrlEncoder::encode($dataString, UrlEncoder::STANDARD_RFC1738);
$dataStringUrlEncodedRFC3986 = UrlEncoder::encode($dataString, UrlEncoder::STANDARD_RFC3986);
$dataStringUrlEncodedCutom = UrlEncoder::encode($dataString, UrlEncoder::STANDARD_CUSTOM_RFC3986_ISH);

আউটপুট দেবে:

string(126) "https%3A%2F%2Fwww.google.pl%2Fsearch%3Fq%3DPHP+is+%2A%2Agreat%2A%2A%21%26id%3D123%26css%3D%23kolo%26email%3Dme%40liszka.com%29"
string(130) "https%3A%2F%2Fwww.google.pl%2Fsearch%3Fq%3DPHP%20is%20%2A%2Agreat%2A%2A%21%26id%3D123%26css%3D%23kolo%26email%3Dme%40liszka.com%29"
string(86)  "https://www.google.pl/search?q=PHP+is+**great**!&id=123&css=#kolo&email=me@liszka.com)"

* আরএফসি স্ট্যান্ডার্ড সম্পর্কে আরও জানুন: https://datatracker.ietf.org/doc/rfc3986/ এবং urlencode বনাম Rawurlencode?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.