URL/HTML/JavaScript的encode/escape

最近经常被URL、HTML、JavaScript的encode/escape弄晕

在这里列出Ruby/JavaScript中一些方法的说明:

[b]1,CGI.escape/CGI.unescape做URL的encode和decode[/b]
参加Ruby库中的cgi.rb
[code]
# URL-encode a string.
# url_encoded_string = CGI::escape("'Stop!' said Fred")
# # => "%27Stop%21%27+said+Fred"
def CGI::escape(string)
string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
'%' + $1.unpack('H2' * $1.size).join('%').upcase
end.tr(' ', '+')
end


# URL-decode a string.
# string = CGI::unescape("%27Stop%21%27+said+Fred")
# # => "'Stop!' said Fred"
def CGI::unescape(string)
string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
[$1.delete('%')].pack('H*')
end
end
[/code]

[b]2,CGI.escapeHTML/CGI.unescapeHTML做HTML的escape/unescape[/b]
参加Ruby库中的cgi.rb
[code]
# Escape special characters in HTML, namely &\"<>
# CGI::escapeHTML('Usage: foo "bar" <baz>')
# # => "Usage: foo "bar" <baz>"
def CGI::escapeHTML(string)
string.gsub(/&/n, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<')
end


# Unescape a string that has been HTML-escaped
# CGI::unescapeHTML("Usage: foo "bar" <baz>")
# # => "Usage: foo \"bar\" <baz>"
def CGI::unescapeHTML(string)
string.gsub(/&(amp|quot|gt|lt|\#[0-9]+|\#x[0-9A-Fa-f]+);/n) do
match = $1.dup
case match
when 'amp' then '&'
when 'quot' then '"'
when 'gt' then '>'
when 'lt' then '<'
when /\A#0*(\d+)\z/n then
if Integer($1) < 256
Integer($1).chr
else
if Integer($1) < 65536 and ($KCODE[0] == ?u or $KCODE[0] == ?U)
[Integer($1)].pack("U")
else
"&##{$1};"
end
end
when /\A#x([0-9a-f]+)\z/ni then
if $1.hex < 256
$1.hex.chr
else
if $1.hex < 65536 and ($KCODE[0] == ?u or $KCODE[0] == ?U)
[$1.hex].pack("U")
else
"&#x#{$1};"
end
end
else
"&#{match};"
end
end
end
[/code]

[b]3,html_escape/h做HTML的escape,url_encode/u做URL的encode[/b]
参加Ruby库中的erb.rb
ActionView::Base include了ERB::Util,所以可以直接在html.erb里调用h和u方法
[code]
def html_escape(s)
s.to_s.gsub(/&/, "&").gsub(/\"/, """).gsub(/>/, ">").gsub(/</, "<")
end
alias h html_escape

def url_encode(s)
s.to_s.gsub(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", $&.unpack("C")[0]) }
end
alias u url_encode
[/code]

[b]4,JavaScript中escape/unescape做HTML的escape,encodeURI/decodeURI做URL的encode/decode[/b]
[code]
var a = "<span>afd adf &&& <<< >>></span>"
var b = escape(a)
=> "%3Cspan%3Eafd%20adf%20%26%26%26%20%3C%3C%3C%20%3E%3E%3E%3C/span%3E"
var c = unescape(b)
=> "<span>afd adf &&& <<< >>></span>"

var a = "http://www.test.com/haha hehe/"
var b = encodeURI(a)
=> "http://www.test.com/haha%20hehe/"
var c = decodeURI(b)
=> "http://www.test.com/haha hehe/"
[/code]

[b]5,jQuery中的text(str)和html(str)[/b]
jQuery中text(str)方法给某个HTML Element设置文本内容,其中的文本如果包括HTML Tag或者<script>标签都会忽略而当作文本来看待
jQuery中html(str)方法给某个HTML Element设置html内容,其中的内容如果包括HTML Tag或者<script>标签则都会当作正常标签来执行

[b]6,JavaScript实现h和uh方法来escape/unescape HTML[/b]
该方法用于JavaScript拼接HTML片段时防止&、<、>、"相关的问题
[code]
function escapeHTML(str) {
str = String(str).replace(/&/g, '&').
replace(/>/g, '>').
replace(/</g, '<').
replace(/"/g, '"');
return str;
}
function unescapeHTML(str) {
str = String(str).replace(/>/g, '>').
replace(/</g, '<').
replace(/"/g, '"').
replace(/&/g, '&');
return str;
}
h = escapeHTML;
uh = unescapeHTML;
[/code]

有了这些helper方法,基本上能满足99%的URL、HTML和JavaScript的escape和encode方面的需求
Java并发编程-线程间通信-volatile和synchronized关键字、等待/通知机制、管道输入/输出流、Thread.join()的使用、ThreadLocal的使用 阅读详情

相关推荐

html++转义函数,转义函数escapeHTML和unescapeHTML

整理一番,代码如下:package escape;//java版本的escape和unescape函数class EscapeUnescape {public static String1. .net的html加密解密函数HttpUtility.HtmlEncodeHttpUtility.HtmlDecode2. java序列化:把JS对象转换成JSON格式JSON.stringify(...

weixin_29795623的博客 1484

js 转译 html 文件

function html2Escape(sHtml) {    return sHtml.replace(/[':'>','&':'&','"':'"'}[c];});   }

ligaivip的专栏 835

Js特殊字符转义之htmlEscape()方法

有时候要解决问题,常常需要将用户输入的特殊字符进行转义,原生js貌似还没有直接对其专业的方法,最近再读Js高级程序设计 的时候刚好看到,碰巧项目中也刚好需要使用次方法,于是就之家搬来用了。 网上关于转义的方法很多,其实原理基本一样,再次就把代码直接搬来分享给大家 /*传入html字符串源码即可*/ function htmlEscape(text){ return text.rep...

樊建华 2万+

HtmlEncodeJavaScriptEncode(预防XSS)

在数据添加到DOM时候,我们可以需要对内容进行HtmlEncodeJavaScriptEncode,以预防XSS攻击。 JavaScriptEncode 使用“\”对特殊字符进行转义,除数字字母之外,小于127的字符编码使用16进制“\xHH”的方式进行编码,大于用unicode(非常严格模式)。 //使用“\”对特殊字符进行转义,除数字字母之外,小于127使用16进制“\xHH”的方...

高级项目经理、专注于技术架构、分享项目管理及职场心得 3655

CTF密码学-编码基础知识点总结

CTF密码学-编码基础知识点总结 0x01 目录 常见编码: 1.ASCII编码 2.Base64/32/16编码 3.shellcode编码 4.Quoted-printable编码 5.XXencode编码 6.UUencode编码 7.URL...

qq_64584459的博客 6768

[CTF]中那些脑洞大开的编码和加密 - 转载

[CTF]中那些脑洞大开的编码和加密

雷厉风行 4308

各种语言的编码和解码(我用过的)

在工作中 经常会遇到编码和解码的问题 <1> html 编码 html编码主要解决html元素标识与显示html标识的。 Server.HtmlEncode("< >"); //对应的是: HtmlDecode <2> url 编码 通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于U...

weixin_30906701的博客 236

转义(escape)、校验与编码(encode

原则: 对输入进行转义,对输出进行校验和编码基于DOM的跨站点脚本JS通过DOM方式输出到HTML元素相关内容时,需要做HTMLEncodeJS通过DOM方式输出到JS元素相关内容时,需要做JavaScriptEncodeJS对所有输入进行转义和检查使用.innerHtml时,如果只是要显示文本内容,必须在innerHtml取得内容后,去除HTML标签客户端对页面的任何用户输入进行HTML转义和校验服务端对客户端传入的用户数据进行进行HTML转义。

Artisan_w 1897

js htmlURL 编码

阮一峰的网络日志之《关于URL编码》:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html w3school的《HTML URL 编码》:https://www.w3school.com.cn/tags/html_ref_urlencode.html 在线解码与编码:https://tool.oschina.net/encode?type=4 ...

青蛙king的博客 593

URL Decoder/Encoder - -

出处:http://www.z4.cn/bbs/showthread.php?threadid=2939 http://www.w3.org/TR/REC-html40/strict.dtd">URL Decoder/Encoderbody {background: white; color: black;}form {margin: 0;}h1 {font-family: Arial, sans

大家一起学习交流吧 1386

js encode ,java decode,virtools 页面播放~

 avascript中存在几种对URL字符串进行编码的方法:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起的作用各不相同。 escape() 方法:采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。不会被此方法编码的字符: @ * / +encodeURI() 方法:把URI字符

飞翔之鹏的程序天空~~~ 4361

URL encode

关于URL编码 作者: 阮一峰 日期: 2010年2月11日 一、问题的由来 URL就是网址,只要上网,就一定会用到。 一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址"http://www.abc.com",但是没有希腊字母的网址"http://www.a

小T is growing 814

关于encode和decode(新添加escape,并和encode的区别)

本文章只针对前端中的浏览器地址来写,暂时还不从python方面进行解析。 为啥会有浏览器编码这一说法 一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址 “h ttp://www.haorooms.com”, 但是没有希腊字母的网址“h ttp://www.aβγ.com” (读作阿尔法-贝塔-伽玛.com)。这是因为网络标准RFC...

paranoidMao 1748

html网页url拼接地址参数

html网页url拼接地址参数 在web项目里页面跳转的过程中,我们有时候需要跳转到外部链接地址(如详情页面跳到本地项目以外的视频播放页)。这时候需要记录当前跳转出去聚焦的内容链接信息,以及当前页面地址,以方便从外部链接地址再跳回到详情页,并聚焦至之前跳转出去的内容块。 通常的url地址参数拼接格式是(使用“?” 隔开地址与参数、 “&”符号来拼接参数,【参数名=参数值】): http...

一口粥粥的博客 1万+

HTML链接上把当前的URL做为参数传递时,注意要对URL进行encode,在JS中我们这样实现...

<ahref="javascript:void(0)" onclick="javascript:location.href='http://url/register/login ?reffer='+encodeURIComponent(location.href)"> <img src="http://img1.c2cedu.co...

weixin_33957648的博客 699

url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介【转】

引子 浏览器URl地址,上网一定会用到,但是浏览器地址有中文或者浏览器url参数操作的时候,经常会用到encodeURIComponent()和decodeURIComponent()以及encodeURI()等等。关于浏览器参数操作,请看文章http://www.haorooms.com/post/js_url_canshu,今天主要讲讲escape(),encodeURI(),encode...

weixin_30448685的博客 98

JS Encode and Decode URL

1.Encode URL String var url = $(location).attr('href'); //get current url //OR var url = 'folder/index.html?param=#23dd&amp;noob=yes'; //or specify one var encodedUrl = encodeURIComponent(url)...

weixin_34192816的博客 170

关于URL encode

HTML Javascript中,对URL进行加解码时要点: 1.Javascript中String.charCodeAt()获得的编码为Unicode(big-endian);在进行URL encode或decode时一般为UTF编码格式。故在进行URL encode或decode时需进行转码。 var string = '我'; var utftext = "";

hongweigg的专栏 4061
上一篇: 在FreeWheel一年半的小结
下一篇: HTTP Basic/Digest Authentication、OAuth
hidetobj
博客等级 码龄19年 15粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值