0

我正在尝试从多字串构成一个 URL:所以我有

$str = "my string"

我试图得到:

"http mysite.com/search/my%20string"

但我不能用 PHP 做到这一点。

urlencode($str) => "my+string"
rawurlencode($str)=>"my string"

我怎么能得到"my%20string"

谢谢你的帮助 !

PS:

也许我可以做str_replace(urlencode(),etc); ,但是否有 urlencode 的参数,以便它自己正确转换?

PS 2:

事实证明,正如 Amal Murali 所说,rawurlencode()WAS 正在这样做,当我用鼠标悬停在链接上时,我只是没有在浏览器上看到它。

但是当我检查源代码或单击链接时,我看到rawurlencode();生成了正确的链接。(带%20's。)。

4

3 回答 3

6

rawurlencode()就是你要找的。但是,如果您Content-Type设置为text/html(这是默认设置),那么您将看到空格字符而不是编码实体。

header('Content-Type: text/plain');
$str = "my string";
echo rawurlencode($str); // => my%20string

注意:我并不是建议您更改Content-Type原始脚本中的标题。这只是为了表明您的rawurlencode()呼叫正在运行并解释您为什么没有看到它。

于 2013-12-28T11:31:41.450 回答
3
// Set URL Base so you can add to it.
$url = "httpmysite.com/search/";
// Set String to search for.
$x = " ";
// Set string to replace with. 
$y = "%20";
//Set string to search.
$z = "my site";
// Concatenate
$url = $url . str_replace($x,$y,$z);

我以这种方式展示了每个步骤,但我只是为它编写了一个方法/函数。

实际上,鉴于现在使用“_”或“-”代替空格来进行 SEO 是标准的,我只需将 %20 替换为 _ 或 -

让我知道这是否有帮助。

于 2013-12-28T11:46:26.010 回答
0

如果你想%20在你的 URL 中看到,你必须使用rawurlencode()

您不应该混淆内容类型,因为您可能会看到一些浏览器感到困惑并将您的 HTML 页面作为文本(作为源)提供,即标签没有被解释为正确的网页。

当然,如果您想通过输出来调试 PHP 代码%20,您不会真正看到可见的结果,因为text/html编码会告诉您的浏览器解释代码,因此您%20将透明地转换为空格。

“使用纯文本”建议仅用于调试目的,因此您可以真正看到%20正在生成的内容。无论如何,您都将使用它来创建 URL,因此整个普通与 html 编码将不适用于您。

于 2013-12-28T11:47:48.907 回答