1

我遇到的问题可能(希望)很容易解决,但我只是卡住了。

当我使用 urlencode(或 rawurlencode)函数时,它不会找到我正在发送的脚本。

所以这很好用:

$data["text"] .= "<a href='index.php?load=results&reg=".$row["region"]."'>".$row["region"]."</a><br/>";

它会带我到正确的页面:

index.php?load=results®=CRO

但是我正在做这项工作的人正在将她的“&”符号替换为 (R) 注册符号,而她却找不到一个页面。不幸的是,我无法在该办公室的任何其他计算机上复制此内容

所以当我改变代码来阅读

$data["text"] .= "<a href='".urlencode("index.php?load=results&reg=".$row["region"])."'>".$row["region"]."</a><br/>";

它试图把我带到这个页面

index.php%3Fload%3Dresults%26reg%3DCRO

但它给了我以下页面未找到错误:

在此服务器上未找到请求的 URL index.php?load=results®=CRO。

这真的很奇怪,因为请求的 URL 与解决顶部问题的 URL 完全相同。我知道我需要在某个阶段运行 urldecode(或 rawurldecode),但如果它甚至没有找到要加载的脚本,我无论如何都无法运行该函数......

编辑:更多细节 - 我正在使用 TextWranger 在 Mac 上编码。该文件使用带有 Unix (LF) 行结尾的 utf8 编码。本地服务器使用 MAMP,实时服务器是基于 Windows 的机器,但我不确定是否有任何配置设置会有所帮助,因为我刚从这里开始。输出 HTML 使用 UTF-8 编码。

4

3 回答 3

2

以下是你如何使用它:

$data["text"] .= "<a href='index.php?load=results&reg=".urlencode($row["region"])."'>".$row["region"]."</a><br/>";

您正在做的是对参数的值进行urlencoding,而不是整个查询。

所以基本上:

$data = "index.php?key=".urlencode("hello world value");
// will result in:
"index.php?key=hello%20world%20value"
于 2012-12-11T01:01:59.203 回答
1

根据HTML 4.01 规范

尽管 URI 不包含非 ASCII 值(参见 [URI],第 2.1 节),但作者有时会在期望 URI 的属性值中指定它们(即,在 DTD 中用 %URI; 定义)。例如,以下 href 值是非法的:

所以本质上你不应该在你的 URI 中使用非 ASCII 字符,因为不同的用户代理会以不同的方式处理它们。

例如,用户代理可能决定使用文档的字符集编码,或者它可能会采用 html-entity 编码。这可能是您的用户提到他们所经历的。因此,最好的办法是通过对 URL 的整个 URI 部分进行 urlencoding来确保始终在标记的href属性中提供 ASCII 字符。a

如果您在运行中组装此 URL,那么 PHP 中的一个可以帮助您处理整个考验的函数是http_build_query,它为您组合查询字符串并正确地对其进行 url 编码。

$row["region"] = "CRO";
$query = array(
                  "load" => "results",
                  "reg"  => $row["region"],
              );
$query = http_build_query($query);

echo $URL = "index.php?" . $query; // index.php?load=results&reg=CRO

现在你可以使用

echo "<a href=\"$URL\">{$row['region']}</a>";

你得到...

<a href="index.php?load=results&reg=CRO">CRO</a>
于 2012-12-11T01:59:00.930 回答
0

问号用作分隔符,不是查询字符串的一部分。

你不能编码字符“?” 特点 ”?” 不是查询字符串的一部分。

当然,您可以自由编码查询字符串的任何部分

尝试:

<?php
echo "<a href='get.php?".urlencode("load=results&reg=".urlencode($row["region"])."'>".$row["region"]."</a><br/>";
var_dump($_GET);
?>
于 2012-12-11T01:23:46.523 回答