2013-03-19 52 views
0

考虑下面的JavaScript:的Javascript替换()函数中添加奇怪的字符

var previewImg = 'http://example.com/preview_img/hey.jpg'; 
var fullImg = previewImg.replace('preview','full'); 

我期望的fullImg值是:

http://example.com/full_img/hey.jpg 

事实上,这是...之类的。正在运行alert(fullImg);显示预期的网址字符串。但是,当我提供该变量的jQuery Fancybox,像这样:

jQuery.fancybox.open(fullImg); 

东西加字符转换成字符串,像这样:

http://example.com/%EF%BF%BCfull_img/hey.jpg 

这哪里是%EF%BF%BC是从哪里来的?它是什么?最重要的是,我该如何摆脱它?

其他一些线索:这是一个运行jQuery 1.5.1的Drupal 7站点。我在网站的其他地方使用了相同的Fancybox脚本,没有任何问题。

回答

3

%EF%BF%BC是一个由三个URL编码字符组成的序列。

您显然看不到字符串中的任何意外字符。这是因为字符序列%EF%BF%BC是不可见的。

它实际上是一个UTF-8字节顺序标记序列。这个序列通常在UTF-8编码文本文件的开头。当你从另一个文件进行复制+粘贴时,他们可能进入了你的代码。

摆脱它们最快捷的方法是找到复制+粘贴的代码位,删除问题两侧的字符,然后重新键入它们。根据您的编辑器,您可能会发现删除行为很奇怪,因为它会删除隐藏的字符。

某些文本编辑器和IDE可以显示隐藏字符的选项。如果你的编辑有这个,它可以帮助你看到神秘人物的位置,所以你可以删除它们。

希望有所帮助。

+1

+1。 'IDE可以选择显示隐藏字符@sam:此外,您可以将编码设置为ANSI,以便更容易找到它们,然后在删除不需要的字符后将编码恢复为无BOM的UTF-8。 – JFK 2013-03-19 22:14:40

+0

天才!有趣的是,我的IDE(Coda 2)有一个“Show Invisible Characters”选项(我经常用于这种情况),但是当我打开它时什么也没有显示。只有当我将编码设置为“Western(ASCII)”时,才会出现奇怪的字符!删除!现在它运行良好。唯一的问题是他们从哪里来?我很确定我手中输入了整个剧本...... – Sam 2013-03-20 00:10:40