windows - AutoHotKey 的“%UserInput%”功能是否存在严重错误?它没有逃脱,或者似乎允许我逃脱,双引号
问题描述
%UserInput% 似乎只在不包含双引号 (") 时才有效。
每当 %UserInput% 包含双引号 (") 时,我通过 AutoHotKey Run 命令调用的 PHP CLI 脚本最终会将测试输入视为单独的参数,因为 AutoHotKey 只是不会转义它。
测试输入为:
test1 " test2
我已经尝试过这些以及 5 万亿个其他版本:
Run %ComSpec% /c "php "C:\a path\to my\test.php" "--query=%UserInput%" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" --query="%UserInput%" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" "--query="%UserInput%"" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" --query=""%UserInput%"" "--skip-multiples""
Run %ComSpec% /c "php "C:\a path\to my\test.php" "--query=""%UserInput%""" "--skip-multiples""
Run %ComSpec% /c php "C:\a path\to my\test.php" --query=%UserInput% --skip-multiples
Run %ComSpec% /c php "C:\a path\to my\test.php" "--query=%UserInput%" --skip-multiples
绝对没有任何作用。在 cmd.exe 中运行它(不以任何方式涉及 AutoHotKey)可以工作,所以这对我来说不是问题:
%ComSpec% /c "php "C:\a path\to my\test.php" "--query=test \" test" "--skip-multiples""
请注意我是如何在查询字符串中的 " 之前手动添加一个 \ 的?是的...... AutoHotKey 不会那样做。我已经阅读了无数小时的手册,但它没有说明这个 - 只是“使用双双引号”,这显然是行不通的。
由于中间的双引号字符,上述所有 AutoHotKey Run 命令都会导致 PHP CLI 脚本将“test1”和“test2”视为单独的参数。它应该将其作为单个字符串接收。
同样,我可以运行上面的 cmd.exe 命令并且它可以工作,但是当我通过 AutoHotKey 运行完全相同(或无数种变体)时,它会中断。因为 AHK 不进行转义。我该如何做到这一点?
(如果用户输入碰巧不包含任何 " 字符,它可以工作。)
(如果有人对 %ComSpec% 感到困惑,那就意味着 cmd.exe。)
解决方案
在经历了地狱和回来之后,我终于想通了。您必须在运行命令之前执行此操作:
UserInput := StrReplace(UserInput, """", "\""")
是的......这是通过纯粹的猜测完成的,因为手册没有提到如何在任何地方做到这一点,而且网上的问题都没有任何理智的答案。
推荐阅读
- javascript - 如何从 PHP 服务器异步获取响应
- c# - 计算每个公司的产品数量
- android - 改造致命异常:OkHttp Dispatcher,java.lang.NullPointerException:拦截器
- android - setOnEditorActionListener 不适用于布局另一端相邻的编辑文本
- javascript - Javascript 输出未显示在 HTML p 标记内
- java - JSCH 控制台读取显示不同命令的相同输出
- sharepoint - 从 Sharepoint 的母版页中删除未使用的 CSS
- cucumber - 黄瓜数据驱动
- firefox - Firefox 位置栏自动完成:建议访问最多的完整 URL,而不是主机
- javascript - $http .then() 后无法追加