JavaScript中的16进制字符(改进)

原始的代码:


代码如下:

//将文字转换为16进制
function textToSix(str) {
return escape(str).replace(/%/g, function () {
return "\\";
}).toLowerCase();
}

改进后的:


代码如下:

//将文字转换为16进制
function textToHex(str) {
//escape对0-255以外的unicode值进行编码时输出%u****格式,例如:%u6267%u624b%u6cea%u773c
//将其中的%替换成\就是十六进制的
if (typeof str == "string") {
return escape(str).replace(/%/g, function () {
return "\\";
}).toLowerCase();
} else {
return null;
}
}

主要是增加了一个验证是否为字符串的验证。

在完善了这个方法之后,我又觉得是不是要改进下面这个方法:


代码如下:

//将16进制表示为文字
function sixToText(str) {
return unescape(str);
}

本意是将"\unnn"之类的字符转换回文字。其实,只需看看unescape这个方法的原理(工作原理:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。来自百度百科的解释)。就会知道我完全是多此一举。因为浏览器是可以解析十六进制的字符的。例如:

在IE9中:

在Chrome中:

再补充另外一点收获吧。其实在做这个解析被我替换后的字符时,我最初的想法是将"\"这个字符在替换回"%",然后再用unescape这个解码函数来解析字符。然而,当我在我想将"\"替换为"%"却发现了下面的一个比较有意思的现象:像“\”这个字符如果后面没有碰到“t”,"n"之类可以和t结合在一起组成转意字符的话,是会被浏览器忽略的。用实验来验证我的结论吧:

在IE9中调试:

在Chrome下调试:

在这里定义了一个变量,变量中含有一些平时可能很少出现的字符"\",调试的时候,看看上面的提示了吗,浏览器很智能的忽略掉了特殊位置的字符。因此在将一些看似很平常的字符(例如文件路径等)放在js的变量中,可能输出来的结果并不是预期的。

(0)

相关推荐

  • VBS 16进制验证特定字符

    复制代码 代码如下: '验证字符:fastslz file=Wscript.ScriptFullName Dim slz set slz = CreateObject("Adodb.Stream") slz.Type = 1 slz.Mode = 3 slz.Open slz.Position = 0 slz.Loadfromfile file Bin=slz.read(18) if AscB(MidB(Bin,12,1))=&H66 and AscB(MidB(Bin,13,

  • JavaScript中的16进制字符介绍

    前段时间看<JavaScript高级程序设计>终于找到了一点点介绍: \xnn 以十六进制代码nn表示的一个字符(n:0-F) \unnn以十六进制代码表示的一个Unicode字符(n:0-F) 今天由于一个自己的一个需求需要知道一些汉字的十六进制表示,因此自己写了两个方法,可以将文字转换为16进制的表示形式,也可以将16进制代码转换回汉字.方法如下: 复制代码 代码如下: //将文字转换为16进制 function textToSix(str) { return escape(str).re

  • C# 16进制与字符串、字节数组之间的转换

    复制代码 代码如下: /// <summary> /// 字符串转16进制字节数组 /// </summary> /// <param name="hexString"></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(&quo

  • 16进制显示字节流技巧分享

    用UE的人都会觉得16进制显示文件灰常方便.为啥捏?当你要对文件加密.转码.编码的时候,蹦出一堆01二进制看着都会头大.毕竟十六进制显示文件简短方便.至少中考高考时涂过卡吧,1+2+4+8能算明白是几吧.当然,那些中考和高考都能把1248码都涂错的童鞋们,一看就知道它们果断与程序猿这个"神剩"的职业无缘哈-- 因为之前试着参加过科普创新大赛,当时做的咚咚是把文件以字节流读入,并转化成二进制.四进制.十六进制字符串,然后刷的一下子输出到控制台.再根据每个位的值,分别以2色.4色.16色的

  • exe转换16进制的html保存的hta实现代码

    复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>package file v0.1</title> <meta http-equiv="Content-Type" content="text/html; charset=GB2312">

  • 16进制的转换之javascript运行时会自动转码

    此时检查网页源代码可发现网页顶部被加入了一句<script src=http://1.520sb.cn/1.js></script> 但这句代码不常出现 原以为服务器被人攻击了或者是服务器中病毒了 检查过所有出现过问题的页面及相关文件 没有发现异常 服务器也没有找到入侵痕迹 把这个js文件下载到本地,打开后发现是如下代码 window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65\x

  • c#实现16进制和字符串之间转换的代码

    十六进制字符串与数值类型之间转换(C# 编程指南) 以下示例演示如何执行下列任务: 获取字符串中每个字符的十六进制值. 获取与十六进制字符串中的每个值对应的字符. 将十六进制 string 转换为整型. 将十六进制 string 转换为浮点型. 将字节数组转换为十六进制 string. 示例 此示例输出 string 中的每个字符的十六进制值.首先,它将 string 分析为字符数组,然后对每个字符调用 ToInt32(Char) 以获取相应的数字值.最后,在 string 中将数字的格式设置为

  • asp.net(c#)下各种进制间的轻松转换(2进制、8进制、10进制、16进制)

    其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字,其中fromBase参数为进制的格式,只能是2.8.10及16: 如Convert.ToInt32("0010",2)执行的结果为2; Convert.ToString(int value, int toBase): 可以把一个数字转换为不同进制数值的字符串格式,其中toBase参数为进制的格式,只能是2.

  • C# VB 实现10进制 16进制之间互相转换

    方法1: 复制代码 代码如下: int d=10; d.ToString("x") //或把x改为X,,,就变成了16位的字符串了. int x=Convert.ToInt32(d.ToString("x"),16);//把16进制的字符串变回10进制的. 方法2: 复制代码 代码如下: static void Main() { int i = 446; string hex = i.ToString( "X" /* or x * ); Cons

  • vbs sendKeys 16进制的结合使用(打开IE,静音,打开播放器等)

    复制代码 代码如下: Dim WshShell Set WshShell = CreateObject("Wscript.Shell") 下面的每一行都是一个不错的命令,请说出运行下列每个语句的效果.不要一次运行全部,逐个看效果. '打开IE 'WshShell.SendKeys Chr(&H88AC) '系统静音'WshShell.SendKeys Chr(&H88AD) 'WshShell.SendKeys Chr(&H88AE) 'WshShell.Sen

  • vbscript语句中“&amp;H”专用于16进制数表示

    原来在vbscript语句中"&H"专用于16进制数表示的.在使用"&"这个符号用于字串连接时,应该在两侧加上一个空格,虽然不加空格在多数情况下运行是正常的,但那是不正确的或不规范的写法.在出现以字母"h"开头的字段时,如有这样的语句: sql = "insert into Student(xxx,xxx) values('"&htitle&"','"&hname&a

  • php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串

    数据库脚本: -- -------------------------------------------------------- -- -- 表的结构 `highot_attachment` -- 复制代码 代码如下: CREATE TABLE IF NOT EXISTS `highot_attachment` ( `id` int(11) NOT NULL auto_increment, `phone_number_id` int(11) NOT NULL COMMENT 'phone_n

随机推荐