In PHP, what are the differences between using urlencode and rawurlencode functions when dealing with URLs as parameters, and when should each be used for optimal results?

When dealing with URLs as parameters in PHP, urlencode function is used to encode special characters in a URL, while rawurlencode function encodes all characters except a few safe ones according to RFC 3986. urlencode is suitable for encoding query string parameters, while rawurlencode is more appropriate for encoding the entire URL. It is important to choose the right function based on the specific requirements of the URL being processed.

// Using urlencode for encoding query string parameters
$query_param = "Hello World!";
$encoded_param = urlencode($query_param);
echo "Encoded parameter: " . $encoded_param;

// Using rawurlencode for encoding the entire URL
$url = "https://www.example.com/page.php?param=Hello World!";
$encoded_url = rawurlencode($url);
echo "Encoded URL: " . $encoded_url;