Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在bookmarklet中转义原始的、未转义的字符串_Javascript_String_Google Chrome_Escaping_Bookmarklet - Fatal编程技术网

Javascript 在bookmarklet中转义原始的、未转义的字符串

Javascript 在bookmarklet中转义原始的、未转义的字符串,javascript,string,google-chrome,escaping,bookmarklet,Javascript,String,Google Chrome,Escaping,Bookmarklet,我正试图为Chrome编写一个搜索引擎bookmarklet,但我很难摆脱字符串 例如,如果搜索引擎bookmarklet如下所示: javascript:alert("%s"); //%s is the search engine query, passed literally by chrome. 然后在以下字符串上运行它将给出不正确的结果: c:\zebra c:zebra instead of c:\zebra 如果斜杠后面的字符恰好是实际的转义字符,则结果将根据字符的不同而有所不

我正试图为Chrome编写一个搜索引擎bookmarklet,但我很难摆脱字符串

例如,如果搜索引擎bookmarklet如下所示:

javascript:alert("%s"); //%s is the search engine query, passed literally by chrome.
然后在以下字符串上运行它将给出不正确的结果:

c:\zebra

c:zebra instead of c:\zebra
如果斜杠后面的字符恰好是实际的转义字符,则结果将根据字符的不同而有所不同

我尝试过对字符串进行转义和取消转义,尝试过对其进行reg-ex'ing,并用双斜杠替换斜杠,但我无法找到一种方法来实现这一点,因为原始字符串第一次进入脚本时,它是取消转义的,之后的任何操作都会错误地看到它


如何正确处理此问题?

到目前为止,我只能在chrome中实现此功能:

javascript: var str = (function(){STARTOFSTRING:/*%s*/ENDOFSTRING:;}).toString().match( /STARTOFSTRING:\/\*([\s\S]*)\*\/ENDOFSTRING:/ )[1]; alert(str);
写入c:\zebra将向c:\zebra发出警报

不幸的是,Firefox在反编译时不支持函数体中的注释


您也不能在字符串中写入序列
*/
,但其他所有内容都应该按字面形式传递,包括引号
等与url无关的,但事实上\是javascript中的转义字符。在任意位置写入
“c:\zebra”
,都会得到
“c:zebra”“
。您需要编写
“c:\\zebra”
>\是javascript中的转义字符@Esailija,是的,我知道,这就是我正在努力解决的问题。>你需要写我不能改变字符串;它由用户提供。>这与url无关是的,它与url无关;用户在addressbar/Omnibar中输入字符串。那么我完全不理解这一点,您可以显示您的代码
javascript:alert(“%s”)已经很好地演示了这个问题。在Chrome(和其他浏览器)中,您可以创建一个带有一点JavaScript的bookmarklet,并为其提供用户输入(通常使用字符串
%s
)。问题是,用户提供的字符串按原样输入到JS中,没有转义或其他任何内容。因此,当用户使用
c:\zebra
(通过地址栏或选择页面中的文本等)运行bookmarklet时,脚本将接收
c:\zebra
,而不是
c:\\zebra
。好的,我终于明白了你在说什么。像这样的,对吗@Synetech这是一个字符串,您将它传递给“搜索引擎”,用于
警报
,但除此之外没有其他功能。
str
的对象类型是什么?我尝试附加一个字符串,在其他类型的函数中使用它,但只有
alert
起作用。@Synetech能给我看一下不起作用的代码吗?它是一个字符串。
警报(window.atob(str))
不做任何事情(即,无效JS)。即使对于
str+=“废话”也是如此;警报(str)
@Synetech这个搜索引擎对我来说工作得非常好
javascript:var str=(function(){STARTOFSTRING:/*%s*/ENDOFSTRING:;}).toString().match(/STARTOFSTRING:\/\*([\s\s]*)\*\/ENDOFSTRING:/)[1];str+=“废话”;警报(str)可能是一些错误的字符?有时从StackOverflow粘贴的代码中存在不可见的unicode空格。