zoukankan      html  css  js  c++  java
  • http请求 url 传递参数(特殊字符)解决方法

    有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码
          十六进制值
    1. + URL 中+号表示空格 %2B
    2. 空格 URL中的空格可以用+号或者编码 %20
    3. / 分隔目录和子目录 %2F
    4. ? 分隔实际的 URL 和参数 %3F
    5. % 指定特殊字符 %25
    6. # 表示书签 %23
    7. & URL 中指定的参数间的分隔符 %26
    8. = URL 中指定参数的值 %3D

    解决的方法:
    replace() 方法如果直接用str.replace("-","!")只会替换第一个匹配的字符.
    而str.replace(/-/g,"!")则可以替换掉全部匹配的字符(g为全局标志)。
    replace()

    js中替换字符变量如下:

     data2=data2.replace(/\%/g,"%25");
     data2=data2.replace(/#/g,"%23");
     data2=data2.replace(/&/g,"%26");


    1,代码中可以使用

    URLEncoder.encode(url, "UTF-8");

    				<script>
    					(function(){
    						function setArticleH(btnReadmore,posi){
    							var winH = $(window).height();
    							var articleBox = $("div.article_content");
    							var artH = articleBox.height();
    							if(artH > winH*posi){
    								articleBox.css({
    									'height':winH*posi+'px',
    									'overflow':'hidden'
    								})
    								btnReadmore.click(function(){
    									if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){
    										if(!window.csdn.anonymousUserLimit.judgment()){
    											window.csdn.anonymousUserLimit.Jumplogin();
    											return false;
    										}else if(!currentUserName){
    											window.csdn.anonymousUserLimit.updata();
    										}
    									}
    									
    									articleBox.removeAttr("style");
    									$(this).parent().remove();
    								})
    							}else{
    								btnReadmore.parent().remove();
    							}
    						}
    						var btnReadmore = $("#btn-readmore");
    						if(btnReadmore.length>0){
    							if(currentUserName){
    								setArticleH(btnReadmore,3);
    							}else{
    								setArticleH(btnReadmore,1.2);
    							}
    						}
    					})()
    				</script>
    				</article>
    

    2.判断是否含有特殊字符

    /**
         * 判断是否含有特殊字符
         *
         * @param str
         * @return true为包含,false为不包含
         */
        public static boolean isSpecialChar(String str) {
            String regEx = "[ _`~!@#$%^&*()+=|{}':;',\[\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|
    |
    |	";
            Pattern p = Pattern.compile(regEx);
            Matcher m = p.matcher(str);
            return m.find();
        }
    public static final String DEFAULT_QUERY_REGEX = "[!$^&*+=|{}';'",<>/?~!#¥%……&*——|{}【】‘;:”“'。,、?]";  
    
    /** 
     * 判断查询参数中是否以特殊字符开头,如果以特殊字符开头则返回true,否则返回false 
     *  
     * @param value 
     * @return 
     * @see {@link #getQueryRegex()} 
     * @see {@link #DEFAULT_QUERY_REGEX} 
     */  
    public boolean specialSymbols(String value) {  
        if (StringUtil.isBlank(value)) {  
            return false;  
        }  
        Pattern pattern = Pattern.compile(getQueryRegex());  
        Matcher matcher = pattern.matcher(value);  
    
        char[] specialSymbols = getQueryRegex().toCharArray();  
    
        boolean isStartWithSpecialSymbol = false; // 是否以特殊字符开头  
        for (int i = 0; i < specialSymbols.length; i++) {  
            char c = specialSymbols[i];  
            if (value.indexOf(c) == 0) {  
                isStartWithSpecialSymbol = true;  
                break;  
            }  
        }  
    
        return matcher.find() && isStartWithSpecialSymbol;  
    }  
    
    
    /** 
     * 获取查询过滤的非法字符 
     *  
     * @return 
     */  
    protected String getQueryRegex() {  
        return DEFAULT_QUERY_REGEX;  
    }  

    经常和公司算法组同事相处,有一天看他们代码,去除字符串中的空格换行符。我的思路就是①正则匹配替换 或者②遍历该字符串挑出合法字符存到另外一片内存里。同事仅仅用同一个数组完成去非法字符,尽管Java不太注重这些,但是高效应该是每个程序员毕生追求。另外吐槽下正则表达式,这种反人类的设计简直。。。好吧,如何绕过正则实现字符串内去空格,请移步《Java字符串去除空格换行符》

  • 相关阅读:
    轮播闪白效果
    轮播图效果
    打字游戏简约版
    js购物时的放大镜效果
    单例模式
    docker
    【spring】注解梳理
    【spring源码-1】BeanFactory + XMLBeanFactory
    【设计模式】
    【大数据Spark】PC单机Spark开发环境搭建
  • 原文地址:https://www.cnblogs.com/zhuhui-site/p/10088567.html
Copyright © 2011-2022 走看看