2

据我所知,井号 (#) 不会发送到服务器,因此我似乎不太可能使用原始 PHP 来解析以下 URL 中的数据:

index.php?name=Ben&address=101 S 10th St Suite #301

我希望使用此 $_GET 数据预填充表单字段。我将如何使用 Javascript(或 jQuery)来做到这一点,并且对于不使用 Javascript 的人来说,是否有一个不会破坏我的表单的后备方案?目前,如果有一个哈希(通常在地址字段中),那么之后的所有内容都不会被解析或存储在 $_GET 中。

4

4 回答 4

4

您可以按照应有的方式urlencode(在 php 中)或encodeURIComponent(在 JavaScript 中)对哈希进行编码。

“哈希”不是请求的一部分,这就是您的脚本永远看不到它的原因。

于 2010-06-01T23:21:51.447 回答
2

就像 webdestroya 说的,你需要发送一个带有 URL 的请求

index.php?name=Ben&address=101%20S%2010th%20St%20Suite%20%23301

如果您使用的是 HTML 表单,那么当您提交表单时,字符串值将被自动编码。

于 2010-06-01T23:35:36.353 回答
1

用户将单击电子邮件中的链接,并希望看到电子邮件中呈现的井号

在将链接粘贴到电子邮件之前,您需要对 Ben 引用的链接进行编码。您目前拥有的根本不是 URL。

您可以选择将空格编码为+而不是%20在查询参数的上下文中,但绝对不能包含原始空格,因为它是 URL 的定义特征,它们没有空格。如果您在 URL 中键入空格Web 浏览器会悄悄地修复错误,但如果 URL 中充满空格,则电子邮件客户端无法从纯文本中挑选出 URL。

有时有一个替代函数将空格编码为+而不是%20. 通常最好避免这种情况,因为+并非在所有情况下都有效,但如果愿意:

index.php?name=Ben&address=101+S+10th+St+Suite+%23301

那么你会使用 PHP 的urlencode函数而不是更标准的rawurlencode.

无论哪种方式,您都必须将哈希编码为%23,否则 HTTP URL 中的哈希表示片段标识符(浏览器滚动到的页面部分)。这不是页面本身地址的一部分;它甚至没有从浏览器传递到服务器,因此您当然无法从$_GET任何其他界面检索它。

组件中还有许多其他字符,例如在插入 URL 字符串之前必须进行 % 编码的地址,否则它们会给您留下无效或无法使用的 URL。如果所有这些%23业务在 URL 中看起来很有趣……那么,您将不得不忍受它。这就是 URL 一直以来的样子。

于 2010-06-01T23:55:59.660 回答
0

我通常将哈希存储在 cookie onunload

ej:

window.unload = function(){

 if(document.location.hash) setCoockie('myhash',document.location.hash);

};
于 2010-06-02T03:58:38.167 回答