php urlencode 在一个 url 中粘贴 home + 其他域
Posted
技术标签:
【中文标题】php urlencode 在一个 url 中粘贴 home + 其他域【英文标题】:php urlencode pastes home + other domain in one url 【发布时间】:2021-04-30 01:18:39 【问题描述】:我遇到了一个外部链接的问题,该链接的链接中有多个“:”并且无法正常工作。通过 urlencode 我可以将此字符更改为 %3A ,它可以工作,但在 a 中它会将链接粘贴到用户当前正在查看的 URL 后面。
外部链接(在本例中为 $url)如下所示:
https://prf.hn/click/camref:somestring/creativeref:somestring/destination:https://www.example.org/product/productname.html
我目前尝试以这种方式打印 $url:
<a href="<?php echo urlencode(html_entity_decode($url) ) ; ?>">
这目前导致,这不起作用:
https://example.net/page/https%3A%2F%2Fprf.hn%2Fclick%2F
应该是什么?
https://prf.hn%2Fclick%2F
我做错了什么?
【问题讨论】:
我想不出一个原始的$url
可以同时产生你提到的两种结果。您是否在浏览器中检查过自己的 HTML 源代码?为什么不在您的问题中输入原始的$url
?很高兴知道为什么要首先对 url 进行编码。
【参考方案1】:
$url="https://prf.hn/click/camref:somestring/creativeref:somestring/destination:https://www.example.org/product/productname.html";
preg_match_all( '@https?://@', $url, $matches, PREG_OFFSET_CAPTURE); // is there a URL in $url?
$new_url = $url;
if (count($matches[0])>1) // more than one "https://" in url
$new_url = substr($url, 0, $matches[0][1][1]) . urlencode(substr($url, $matches[0][1][1]));
echo $new_url;
输出: https://prf.hn/click/camref:somestring/creativeref:somestring/destination:https%3A%2F%2Fwww.example.org%2Fproduct%2Fproductname.html
这会让你更接近吗?
【讨论】:
嗨,ajCary,它让我越来越近了..这是正确的答案!非常感谢!【参考方案2】:很难看到您在这里尝试做什么。当您说链接中有一个“:”时,您是指 https://...中的冒号吗?
调用 urlencode 会将冒号转换为 %3F 和 / 转换为 %2F,因此“url”字符串不再被视为有效的 url。单击它会导致您的浏览器将该字符串作为当前路径中的文件查找,并在其前面加上页面路径。
看看你正在生成的页面的开发者工具/视图源,我想你会看到类似的东西
<a href="https%3A%2F%2Fprf.hn%252Fclick%252F">Test</a>
... 这不是 url。
你是从 $url="https://prf.hn/click/" 还是 "https://prf.hn%2Fclick%2F" 开始的?
如果是第一个,为什么要解码和编码?
如果是第二个,只使用 html_entity_decode($url) 会给出https://prf.hn/click/ 这是一个有价值的 url。
【讨论】:
努力解释这个问题是关于什么的。 ? 您好 AjCary,感谢您的通知。我添加了几个例子。问题是:unicode 可以工作,但它会将外部链接粘贴到我自己的 url 后面的 这确实有帮助,谢谢。因此,如果我没有遗漏某些内容,那么 /click/ 之后的 url 部分是几个标识符:值,其中最后一个值是 url。嗯。好吧,“:”是 url 中的一个有效字符 - 请参阅 ***.com/a/2053640/2493082 ,所以您可能需要做的就是处理对 destination:url 位的编码。以上是关于php urlencode 在一个 url 中粘贴 home + 其他域的主要内容,如果未能解决你的问题,请参考以下文章
php 浏览器URL加密函数urlencode 和rawurlencode函数