php - url编码的目的?

时间:2014-04-07 22:28:31

标签: php urlencode

根据W3学校的说法:

  

URL编码将字符转换为可以通过Internet传输的格式。   URL只能使用ASCII字符集通过Internet发送。   由于URL通常包含ASCII集之外的字符,因此必须将URL转换为有效的ASCII格式。

我在插入查询后面有一个url encode语句:

$Query = "INSERT INTO $Table_1 VALUES ('0','".mysql_escape_string($forename)."','".mysql_escape_string($surname)."', '".mysql_escape_string($username)."', '".mysql_escape_string($password)."', '".mysql_escape_string($email)."')";

if(mysql_db_query ($DBName, $Query)) {
$message = " - You have successfully registered";
header("Location: register.php?message=".urlencode($message));
} else {
die("Query was: $Query. Error: ".mysql_error());
}

为什么有必要?因为电子邮件地址中的@等字符是在标题重定向中发送的吗?

1 个答案:

答案 0 :(得分:3)

根据RFC3986

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
query         = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG

RFC2234

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
ALPHA         = %x41-5A / %x61-7A   ; A-Z / a-z
DIGIT         = %x30-39             ; 0-9

标准要求这样做。

PS:正如您所看到的,@是一个有效的字符,无需额外编码即可在查询中使用。