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() ⽅法如果直接⽤place("-","!")只会替换第⼀个匹配的字符.
⽽place(/\-/g,"!")则可以替换掉全部匹配的字符(g为全局标志)。
replace()
js中替换字符变量如下:
place(/\%/g,"%25");
place(/\#/g,"%23");
place(/\&/g,"%26");
1,代码中可以使⽤
<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();
}
}
$(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.判断是否含有特殊字符
/**
java replace方法* 判断是否含有特殊字符
*
* @param str
* @return true为包含,false为不包含
*/
public static boolean isSpecialChar(String str) {
String regEx = "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t";
Pattern p = Patternpile(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 = Patternpile(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不太注重这些,但是⾼效应该是每个程序员毕⽣追求。另外吐槽下,这种反⼈类的设计简直。。。好吧,如何绕过正则实现字符串内去空格,请移步
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论