不可打印字符的问题

时间:2010-12-23 20:22:22

标签: javascript html dom ascii

我正在使用条形码扫描仪将2-D数据矩阵,UID条形码读入Web应用程序。 UID包含不可打印的ASCII字符RS,GS和EOT。我的问题是浏览器自动将HTML代码附加到每个ASCII字符的前面,因为没有为RS,GS和EOT定义的HTML代码,它会引发一个拟合。

我正在使用Javascript从扫描的数据中动态构建一个字符串,这里是我得到的样本

  

091 [041)062> 030RS

如您所见,RS char被赋予一个值(030),该值不作为标准HTML代码存在。另一个问题似乎是当一个普通的字母字符被点击时,浏览器似乎将其视为回车符(CR),因此它们之前的值会被简要显示然后消失。

我希望能够在浏览器文本框中显示整个字符串。我有一个javascript函数,它查找这些不可打印的字符并将它们换成字母,即RS将被替换为“R”和“S”的串联。但我仍然有如上所述的浏览器疯狂的问题。任何见解都表示赞赏。

更新:

嗨马修,抱歉没有更详细。我用替换所有标志尝试了替换函数:

  

与string.replace(/(030)|(029)|(004)/克, “”);

问题是它取代了整个字符串,所以

  

091 [041)062> 030RS

成为

  

/(030)|(029)|(004)/ G

1 个答案:

答案 0 :(得分:3)

我不确定我是否完全理解你的问题,但为什么不在字符串上运行替换函数然后再写入DOM呢?如果从不打印不可打印的字符,则不会出现任何问题。


对更新的响应

您可以使用正则表达式将不可打印字符与十六进制值匹配。有关详细信息,请查看this。这是一个简单的例子:

uid.replace(/[\x30\x29\x04]/g,"")

(请注意,replace()函数在字符串实例上调用,而不是在String本身上调用。)

为了提高效率,请考虑使用一系列不可打印的字符(例如[\x00-\x1F\x80-\xFF])。