【亲测有效】解决url中&times会被转成×的问题 &timestamp=打印出来是 ×tamp=

背景在调试微信分享功能时打印拼接好的字符串&timestamp=返回×tamp=

错误示例

预计打印字符串

string(195) "jsapi_ticket=bxLdikRXVbTPdHSM05e5u3kzOJuUVOl0stOKBg2WGV0OZOgiRI9TkAq5biowyxqqLqvU0MLwSFK6Us88N8361A&noncestr=Fn5Y1anbaK1Zcbg2&timestamp=1712469025&url=https://www.baidu.com"

实际打印字符串

string(195) "jsapi_ticket=bxLdikRXVbTPdHSM05e5u3kzOJuUVOl0stOKBg2WGV0OZOgiRI9TkAq5biowyxqqLqvU0MLwSFK6Us88N8361A&noncestr=Fn5Y1anbaK1Zcbg2xtamp=1712469025&url=https://www.baidu.com"

最终解决方案(如何是为了解决微信得问题请用方法1其他问题,三个解决方案均可)

方法1:把【&】符号转义成html实体,【&】的实体是【&】。

 $string = 'jsapi_ticket=' . $ticket . '&noncestr=' . $noncestr . '&timestamp=' . $timestamp . '&url=' . $url;

方法2:既然是&符号和times结合会被转义,那就不写在一起,将参数放在第一位。

 $string = 'timestamp=' . $timestamp. '&noncestr=' . $noncestr . 'jsapi_ticket=' . $ticket  . '&url=' . $url;

方法3:使用htmlspecialchars()函数,把预定义的字符 转成 HTML 实体。

 $string = 'jsapi_ticket=' . $ticket . '&noncestr=' . $noncestr . '&timestamp=' . $timestamp . '&url=' . $url;
echo htmlspecialchars($string );
1 package com.alibaba.traffic.web; 2 3 import java.io.UnsupportedEncodingException; 4 import java.security.InvalidKeyException; 5 import java.security.NoSuchAlgorithmException; 6 7 import javax.crypto.Mac; 8 import javax.crypto.SecretKey; 9 import javax.crypto.spec.SecretKeySpec; 10 11 import org.apache.commons.codec.binary.Hex; 12 特别注意 附件 6 13 /** 14 * @author dongdong.fdd 15 * @date 2018/9/27 上午11:29 16 */ 17 public class T { 18 public static void main(String[] args) 19 throws InvalidKeyException, UnsupportedEncodingException, No SuchAlgorithmException { 20 long timestamp = System.currentTimeMillis() / 1000; 21 String paramValuesStr = "allAMAP-TRAFFIC-BRAIN10" + timestam p;//该值为排好序的参数的参数值拼接结果 22 String clientSecret = "testclientsecret";//该值为申请到的client Secret 23 24 Mac mac = Mac.getInstance("HmacSHA256"); 25 byte[] secretByte = clientSecret.getBytes("UTF-8"); 26 byte[] dataBytes = paramValuesStr.getBytes("UTF-8"); 27 28 SecretKey secretKey = new SecretKeySpec(secretByte,"HMACSHA2 56"); 29 mac.init(secretKey); 30 31 byte[] doFinal = mac.doFinal(dataBytes); 32 byte[] hexB = new Hex().encode(doFinal); 33 34 String digest = new String(hexB, "utf-8");//计算好的签名 26f2042cde2e9ca01d41ecdb27a91fd9b84f0263c411bcb13b195ec589096885 35 System.out.println(digest); 36 37 String resultUrl = "http://et-api.amap.com/index/cityRankin g?adcodes=all&clientKey=AMAP-TRAFFIC-BRAIN&size=10&timestamp="+times tamp+"&digest=" + digest; 38 System.out.println(resultUrl); 39 } 将这段代码使用python实现
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G佳伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值