2009-04-09 20:20

[PHP] 解析 URL 字串 parse_url , parse_str

parse_url 會解析一個標準的 URL 字串

  1. <?php 
  2. $urlStr="http://user:passwd@host:80/path?a1=v1&a2=v2#anchor"; 
  3. $url=parse_url($urlStr); 
  4. print_r($url); 
  5. /* output: 
  6. Array 
  7. ( 
  8.    [scheme] => http 
  9.    [host] => host 
  10.    [port] => 80 
  11.    [user] => user 
  12.    [pass] => passwd 
  13.    [path] => /path 
  14.    [query] => a1=v1&a2=v2 
  15.    [fragment] => anchor 
  16. ) 
  17. */ 
  18.  
  19. echo parse_url($url, PHP_URL_SCHEME); 
  20. // prints:  http 
  21.  
  22. echo parse_url($url, PHP_URL_HOST); 
  23. // prints: host 
  24.  
  25. echo parse_url($url, PHP_URL_PORT); 
  26. // prints: 80 
  27.  
  28. echo parse_url($url, PHP_URL_USER); 
  29. // prints: user 
  30.  
  31. echo parse_url($url, PHP_URL_PASS); 
  32. // prints: passwd 
  33.  
  34. echo parse_url($url, PHP_URL_PATH); 
  35. // prints: /path 
  36.  
  37. echo parse_url($url, PHP_URL_QUERY); 
  38. // prints: a1=v1&a2=v2 
  39.  
  40. echo parse_url($url, PHP_URL_FRAGMENT); 
  41. // prints: anchor 
  42.  
  43. ?> 


parse_str 會解析 URL Query 格式的字串
這裡特別注意,別使用下面的第一種方式直接解析 URL 上的 query
這會造成資安上的漏洞,這會讓外部可以直接修改裡面的變數值
  1. <?php 
  2. $url_query = "city=new+york&id=3456&paid%5Bcurrency%5D=euro&paid%5Bamount%5D=345&paid%5Breceipt%5D=fgf" 
  3. parse_str($url_query); 
  4.  
  5. echo $city; 
  6. // prints: new york 
  7.  
  8. echo $id; 
  9. // prints: 3456 
  10.  
  11. print_r($paid); 
  12. /* output: 
  13. Array 
  14. ( 
  15.    [currency] => euro 
  16.    [amount] => 345 
  17.    [receipt] => fgf 
  18. ) 
  19. */ 
  20.  
  21. /* 不建議上面的作法,因為會複寫原本的變數 
  22. * 造成資安上的漏洞 
  23. * */ 
  24.  
  25. parse_str($url_query, $query); 
  26. print_r($query); 
  27. /* output : 
  28. Array 
  29. ( 
  30.    [city] => new york 
  31.    [id] => 3456 
  32.    [paid] => Array 
  33.    ( 
  34.        [currency] => euro 
  35.        [amount] => 345 
  36.        [receipt] => fgf 
  37.    ) 
  38.  
  39. )*/ 
  40. ?> 


參考來源:
Easy way to build GET query strings in php

0 回應: