用PHP替换%20的空格。 urlencode和rawurlencode不起作用

时间:2013-12-28 11:28:50

标签: php whitespace urlencode url-encoding rawurl

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

$str = "my string"

我想要得到:

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

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

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

如何获得"my%20string"

感谢您的帮助!

P.S:

也许我能做str_replace(urlencode(),etc); 但是urlencode是否存在一个参数,以便它自己正确转换?

P.S。 2:

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

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

3 个答案:

答案 0 :(得分:5)

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

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

注意:我并不是说您应该更改原始脚本中的Content-Type标题。这只是为了表明您的rawurlencode()电话 正在工作,并解释您为什么没有看到它。

答案 1 :(得分: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);

我把它放在那里展示每一步,但我只是为它写一个方法/函数。

实际上,鉴于现在标准使用“_”或“ - ”代替空间用于搜索引擎优化目的,我只需用%或 -

替换%20

如果有帮助,请告诉我。

答案 2 :(得分:0)

如果您想在网址中看到%20,则必须使用rawurlencode()

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

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

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