在php中可以使用urlencode函數或rawurlencode函數對URL進行轉碼,其語法分別是「urlencode ( string str)」和「rawurldecode ( string str)」。
php中文url轉碼
#
PHP中對於URL進行編碼,可以使用urlencode() 或rawurlencode(),二者的區別是前者把空格編碼為' ',而後者把空格編碼為' ',不過應該注意的是,在編碼時應該只對部分URL編碼,否則URL中的冒號和反斜線也會被轉義。
下面是詳細解釋:
string urlencode ( string str)
傳回字串,此字串中除了-_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進位數,空格則編碼為加號( )。此編碼與 WWW 表單 POST 資料的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣。由於歷史原因,此編碼在將空格編碼為加號( )方面與 RFC1738 編碼(請參閱 rawurlencode())不同。此函數便於將字串編碼並將其用於URL 的請求部分,同時它還便於將變數傳遞給下一頁:
推薦:《PHP教程》
範例1. urlencode() 範例
<?php echo '<a href="mycgi?foo=', urlencode($userinput), '">'; ?>
注意:小心與HTML 實體相符的變數。像 &、© 和 £ 都會被瀏覽器解析,並使用實際實體取代所預期的變數名稱。這是明顯的混亂,W3C 已經告誡人們好幾年了。參考網址:http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP 透過 arg_separator .ini 指令,支援將參數分割符變成 W3C 所建議的分號。不幸的是大多數用戶代理並不會發送分號分隔符號格式的表單資料。較簡單的解決方法是使用 & 來代替 & 作為分隔符號。你不需要為此修改 PHP 的 arg_separator。讓它仍為 &,而僅使用 htmlentities(urlencode($data)) 對你的 URL 進行編碼。
範例2. urlencode() 與htmlentities() 範例
<?php echo '<a href="mycgi?foo=', htmlentities(urlencode($userinput)), '">'; ?>
string urlencode ( string str)
#回傳字串,此字串中除了-_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進制數。這是在 RFC 1738 中描述的編碼,是為了保護原義字元以免其被解釋為特殊的 URL 定界符,同時保護 URL 格式以免其被傳輸媒體(像一些郵件系統)使用字元轉換時弄亂。例如,如果你想在FTP 的URL 中包含密碼:
範例1. rawurlencode() 範例1
<?php echo '<a href="ftp://user:', rawurlencode('foo @+%/'), '@ftp.my.com/x.txt">'; ?>
或者,如果你想透過URL 的PATH_INFO 構成部分去傳遞訊息:
範例2. rawurlencode() 範例2
<?php echo '<a href="http://x.com/department_list_script/', rawurlencode('sales and marketing/Miami'), '">'; ?>
## 解碼時,可以使用對應的urldecode() 和rawurldecode(),相應地,rawurldecode() 不會把加號(' ')解碼為空格,而urldecode() 可以。以下是詳細範例:
string urldecode ( string str)
範例1. urldecode() example
<?php $a = explode('&', $QUERY_STRING); $i = 0; while ($i < count($a)) { $b = split('=', $a[$i]); echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])), ' is ', htmlspecialchars(urldecode($b[1])), "<br />\n"; $i++; } ?>
範例1. rawurldecode() 範例
<?php echo rawurldecode('foo%20bar%40baz'); // foo bar@baz ?>
function utf8RawUrlDecode ($source) { $decodedStr = ""; $pos = 0; $len = strlen ($source); while ($pos < $len) { $charAt = substr ($source, $pos, 1); if ($charAt == '%') { $pos++; $charAt = substr ($source, $pos, 1); if ($charAt == 'u') { // we got a unicode character $pos++; $unicodeHexVal = substr ($source, $pos, 4); $unicode = hexdec ($unicodeHexVal); $entity = "&#". $unicode . ';'; $decodedStr .= utf8_encode ($entity); $pos += 4; } else { // we have an escaped ascii character $hexVal = substr ($source, $pos, 2); $decodedStr .= chr (hexdec ($hexVal)); $pos += 2; } } else { $decodedStr .= $charAt; $pos++; } } return $decodedStr; }
以上是php中文url轉碼的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!