最近對傳遞變數作了一個簡單的實驗,沒使用 urlencode() 函數時,只要遇到「 & 」等 HTML 特殊字元都難逃字串被截斷的命運:
test1.php
test2.php
Demo
test1.php
test2.php
Demo
所以用 GET 方式傳變數,最好都先加上 urlencode(),尤其傳的內容是網址的話,& 出現機會大增,特別容易被截斷。接收變數時,PHP 會自動解碼,不需再加上 urldecode()。值得注意的是,字串被截斷的現象只發生在 $_GET,$_POST 傳遞的變數則沒有類似的問題。
(P.S. 以上現象發生於 HTML 特殊字元上:例 &、<、>... 等字元)
test1.php
<?php
$txt = "A&B&C";
echo "<a href=\"test2.php?txt=".$txt."\">GO</a>";
?>
$txt = "A&B&C";
echo "<a href=\"test2.php?txt=".$txt."\">GO</a>";
?>
test2.php
<?php
echo $_GET['txt'];
?>
echo $_GET['txt'];
?>
Demo
A
test1.php
<?php
$txt = "A&B&C";
echo "<a href=\"test2.php?txt=".urlencode($txt)."\">GO</a>";
?>
$txt = "A&B&C";
echo "<a href=\"test2.php?txt=".urlencode($txt)."\">GO</a>";
?>
test2.php
<?php
echo $_GET['txt'];
?>
echo $_GET['txt'];
?>
Demo
A&B&C
所以用 GET 方式傳變數,最好都先加上 urlencode(),尤其傳的內容是網址的話,& 出現機會大增,特別容易被截斷。接收變數時,PHP 會自動解碼,不需再加上 urldecode()。值得注意的是,字串被截斷的現象只發生在 $_GET,$_POST 傳遞的變數則沒有類似的問題。
(P.S. 以上現象發生於 HTML 特殊字元上:例 &、<、>... 等字元)
| 2008/01/08 00:02 |
Trackback Address :: http://blog.raienet.com/trackback/388
