特殊Url处理。例如addActionpop.htm?url='http://localhost:8080/PowerPlayer.p3x?Tid=1826&Cid=152728&Fid=376424'&code=eeee@MG

本文介绍了一个关于URL参数处理的问题及解决方法。当接收到包含特殊字符的URL时,容易发生错误解析。通过使用自定义的EscapeUnescape工具类,可以有效地进行URL编码与解码,确保参数传递的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在分享下我今天遇到的问题或许有人已经遇到过,或许将来你会遇到
o(∩_∩)o...哈哈
处理一个url请求,对方传给我一个url的播放地址,程序做完这么久了都没有发现这个问题。
今天某地的服务器出现播放地址无法访问的情况。
页面源码:
<a href="addActionpop.htm?url=${mobilepop.vovod_url }&code=${mobilepop.code}" class="a1"> <img src="image/vedo_btn.jpg" alt=""/></a>
 
url是一个整体参数哦。
但是他传给我的参数是:
这样的形式。到后台后这个url就被解析成了2个codeo(∩_∩)o...哈哈
大家已经明白什么意思了吧?
特殊字符处理
附上处理方法:
package com.mobile.util;
public class EscapeUnescape {
 public static String escape(String src) {     
  int i;     
  char j;     
  StringBuffer tmp = new StringBuffer();     
  tmp.ensureCapacity(src.length() * 6);     
  for (i = 0; i < src.length(); i++) {     
   j = src.charAt(i);     
   if (Character.isDigit(j) || Character.isLowerCase(j)     
     || Character.isUpperCase(j))     
    tmp.append(j);     
   else if (j < 256) {     
    tmp.append("%");     
    if (j < 16)     
     tmp.append("0");     
    tmp.append(Integer.toString(j, 16));     
   } else {     
    tmp.append("%u");     
    tmp.append(Integer.toString(j, 16));     
   }     
  }     
  return tmp.toString();     
 }     
 public static String unescape(String src) {     
  StringBuffer tmp = new StringBuffer();     
  tmp.ensureCapacity(src.length());     
  int lastPos = 0, pos = 0;     
  char ch;     
  while (lastPos < src.length()) {     
   pos = src.indexOf("%", lastPos);     
   if (pos == lastPos) {     
    if (src.charAt(pos + 1) == 'u') {     
     ch = (char) Integer.parseInt(src     
       .substring(pos + 2, pos + 6), 16);     
     tmp.append(ch);     
     lastPos = pos + 6;     
    } else {     
     ch = (char) Integer.parseInt(src     
       .substring(pos + 1, pos + 3), 16);     
     tmp.append(ch);     
     lastPos = pos + 3;     
    }     
   } else {     
    if (pos == -1) {     
     tmp.append(src.substring(lastPos));     
     lastPos = src.length();     
    } else {     
     tmp.append(src.substring(lastPos, pos));     
     lastPos = pos;     
    }     
   }     
  }     
  return tmp.toString();     
 }     
 public static void main(String[] args) {     
  String tmp = "?";     
  System.out.println("testing escape : " + tmp);     
  tmp = escape(tmp);     
  System.out.println(tmp);     
  System.out.println("testing unescape :" + tmp);     
  System.out.println(unescape(tmp));     
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值