【问题标题】:php - purpose of url encode?php - url编码的目的?
【发布时间】:2014-04-07 22:28:30
【问题描述】:

根据 W3 学校:

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

我在插入查询之后有一个 url 编码语句:

$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());
}

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

【问题讨论】:

  • w3schools的解释还不够吗? (虽然不完全正确)
  • 不完全正确是什么意思?!
  • 它出于某种原因提到了 ASCII,而那里只允许使用狭窄的 ASCII 字符子集。检查我的答案以获得进一步的解释。

标签: php urlencode


【解决方案1】:

根据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:如您所见,@ 是一个有效字符,可按原样在查询中使用,无需额外编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2011-10-14
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多