Twitter分享按钮URL丢失id参数问题排查求助
为什么Twitter分享链接里的id参数消失了?
嘿,这个问题我太熟悉了!咱们一步步拆解原因和解决办法:
问题根源:未编码的URL特殊字符
你直接把拼接好的$url塞进<a>标签的href属性时,URL里的&符号在HTML中是特殊字符——它被浏览器用来分隔标签的属性。
看你的原代码:
<a href="https://twitter.com/intent/tweet?text=<?php echo $url; ?>" target='_blank'><img class='shareimg' src='social/01.png' alt='img'></a>
浏览器解析这段代码时,$url里的http://localhost/abcmemento.se/s00/view.php?cat=category-abc&id=1会被拆成两部分:
href属性的有效内容:https://twitter.com/intent/tweet?text=http://localhost/abcmemento.se/s00/view.php?cat=category-abc- 一个额外的HTML属性:
id=1
所以Twitter只能接收到&之前的片段,自然丢失了id=1参数。
解决办法:对URL进行编码
你需要用PHP的urlencode()(或rawurlencode())函数对$url编码,把特殊字符转换成浏览器和服务器能正确识别的格式。
修改后的代码如下:
<a href="https://twitter.com/intent/tweet?text=<?php echo urlencode($url); ?>" target='_blank'><img class='shareimg' src='social/01.png' alt='img'></a>
编码后,$url里的&会变成%26,完整的编码后URL是:
http%3A%2F%2Flocalhost%2Fabcmemento.se%2Fs00%2Fview.php%3Fcat%3Dcategory-abc%26id%3D1
这样浏览器会把整个编码字符串当作href属性的一部分,Twitter就能完整获取包含id=1的URL了。
小提示:两种编码函数的区别
urlencode():把空格转换成+,适合编码URL的查询参数部分rawurlencode():把空格转换成%20,更符合RFC标准,需要严格URL编码时可以用它
不过这个场景下,urlencode()完全能解决问题!
内容的提问来源于stack exchange,提问作者qadenza
相关产品推荐
相关产品推荐

