【问题标题】:PHP proc_open() escape multiline argumentPHP proc_open() 转义多行参数
【发布时间】:2021-11-25 15:09:06
【问题描述】:

我正在尝试在 Windows 上使用 proc_open() 将字符串从 php 传递给批处理文件。除非我传递的字符串是多行的,否则它工作正常,因为它用换行符打破了命令。我尝试了各种转义方法,但似乎都不起作用:

cmd 样式 - 打印转义符号并换行:

proc_open('script.bat -m "this is ^\n multiline"', $desc, $pipes)

另一个尝试 - 打印整个字符串:

proc_open('script.bat -m "this is ^\\n multiline"', $desc, $pipes)

powershell 样式 - 打印整个字符串:

proc_open('script.bat -m "this is `n multiline"', $desc, $pipes)

无论我尝试什么,它要么打破字符串,要么按原样打印,没有换行符。

我错过了什么或做错了什么?如何通过proc_open() 获取多行参数?

【问题讨论】:

  • 看起来你在 " 之前的 " 之后缺少一个撇号 - ' ,因此例如第一个应该是: proc_open('script.bat -m "this is ^\n multiline"', $desc, $pipes); 您在所有尝试中都打开了一个撇号 ' 字符串,但没有关闭它....
  • @Shlomtzion 对不起,我在尝试重现问题时出错了。我编辑了这个问题。但是它与问题的重点无关,因为我在实际脚本中很好。
  • 在 powershell 示例中,您不会错过 ' - 撇号 ...这可能就是它在那里工作的原因....
  • @Shlomtzion 我的实际脚本中有结束撇号。这只是我为了这个问题而写一个例子时的错误。
  • 嗯,这听起来像是 urlencode 可以解决的问题,有一种方法可以在批处理文件中对字符串进行 urldecode ......我真的在这里吐球 :) 我不知道它是否会工作。但如果你想尝试:stackoverflow.com/questions/28221685/urldecode-in-batch-file

标签: php powershell batch-file cmd newline


【解决方案1】:

即使您将其正确转义,您的批处理文件也几乎不可能获取多行参数。

在尝试修复 php 中的转义之前,您应该直接从 cmd.exe 自己测试批处理脚本

c:\> script.bat This_is_^
More? 
More? multiline

一个简单的echo %*set "arg=%~1" 无法处理多行参数,但有一些技巧,例如:
How to receive even the strangest command line parameters?
Im passing a multi line text as argument which will ... has only 1 line

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多