PHP中有一個很常用的函數,叫做rawurlencode。這個函數可以把任意的數據轉換成一個符合URL規范的編碼。這個函數可以用在很多地方,比如URL傳遞、cookie傳遞、POST數據傳遞等等。
下面來看一個例子,假設我們有如下的URL:http://www.example.com/query.php?q=hello world。如果我們直接在瀏覽器中打開這個URL,會發現它報錯了。這是因為空格(space)在URL中是不合法的字符。我們需要對它進行轉換,把空格轉成%20。這個轉換可以使用rawurlencode函數來完成。下面是對上面的URL進行轉換的代碼:
$url = 'http://www.example.com/query.php?q=hello world'; $url_encoded = rawurlencode($url); echo $url_encoded;
上面這個代碼會輸出:http%3A%2F%2Fwww.example.com%2Fquery.php%3Fq%3Dhello%20world。這個編碼就是符合URL規范的編碼。
不僅可以轉換URL,rawurlencode還可以轉換其他數據。比如,假設我們有一個數組,如下:
$data = array( 'name' => 'John Smith', 'age' => 30, );
如果我們需要把這個數組用POST方法提交到服務器上,那么我們需要把它轉成一串符合URL規范的字符串。這可以使用http_build_query函數來完成。這個函數可以把一個數組轉成形如key1=value1&key2=value2的字符串。下面是一個例子:
$data = array( 'name' => 'John Smith', 'age' => 30, ); $data_encoded = http_build_query($data); echo $data_encoded;
上面這個代碼會輸出:name=John+Smith&age=30。這個字符串就可以被用于POST數據了。但需要注意的是,如果這個字符串中包含了特殊字符,如%、+、&等等,那么它們也需要被轉義。這可以使用rawurlencode函數來完成。下面是一個完整的轉換代碼示例:
$data = array( 'name' => 'John Smith', 'age' => 30, ); $url = 'http://www.example.com/post.php'; $data_encoded = http_build_query($data); $data_encoded = rawurlencode($data_encoded); $post_data = "data={$data_encoded}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $result = curl_exec($ch); curl_close($ch);
上面這個代碼把$data數組轉成了符合URL規范的字符串,并且對這個字符串進行了轉義,然后把它作為POST數據提交到了$post_url中的服務器上。
綜上所述,rawurlencode是一個非常常用的函數,它可以把任意數據編碼成符合URL規范的字符串。它可以用在很多場合,例如URL傳遞、cookie傳遞、POST數據傳遞等等。需要注意的是,如果你的編碼后的字符串中包含了特殊字符,那么這些特殊字符也需要被轉義。