我正在尝试用多字符串构成一个URL: 所以我有
$str = "my string"
我想要得到:
"http mysite.com/search/my%20string"
但我不能用PHP做到这一点。
urlencode($str) => "my+string"
rawurlencode($str)=>"my string"
如何获得"my%20string"
?
感谢您的帮助!
也许我能做str_replace(urlencode(),etc);
但是urlencode是否存在一个参数,以便它自己正确转换?
事实证明,正如Amal Murali所说,rawurlencode()
我正在做这件事,当我用鼠标悬停在链接上时,我只是没有在浏览器上看到它。
但是当我检查源代码或点击链接时,我看到rawurlencode();
生成了正确的链接。 (使用%20
。)。
答案 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编码将不适用于您。