php - 带有转义字符的 Symfony 控制台输出

标签 php symfony console

我正在用 sprintf() 生成一条消息然后用 Symfony Console Component 输出以彩色的方式:

$mask = '<info>%s</info>';
$message = sprintf($mask, 'MyString');
$output->writeln($message);

这通常有效(以绿色输出命名空间)。但是,如果字符串以 反斜杠 结尾,结束 info 标签将被忽略:

$message = sprintf($mask, 'MyString\');
$output->writeln($message);

输出:

MyString</info>
        ^^^^^^^

显然反斜杠似乎是一种转义字符,但如何转义呢?或者如何保留结束的意思</info>标签?

到目前为止我试过:

  • addcslashes('My\String\', '\\') - 在内部复制并在最后单独执行:

    My\\String\</info>
    
  • &#92;作为“HTML”实体,HTML 实体序列只是逐字输出,结束标记消失了:

    My&#92;String&#92;
    

最佳答案

<字符可以通过 \ 转义正如您已经猜到的那样。尾部的反斜杠可以转义 from Symfony v3.0.3、v2.8.3、v2.7.10 和 v2.3.38 与 OutputFormatter :

use Symfony\Component\Console\Formatter\OutputFormatter;

$mask = '<info>%s</info>';
$message = sprintf($mask, OutputFormatter::escape('MyString\\'));
$output->writeln($message);

否则你可以使用:

$mask = "\033[32m%s\033[0m";
$message = sprintf($mask, 'MyString\\');
$output->writeln($message);

关于php - 带有转义字符的 Symfony 控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36594263/

相关文章:

php - 如何在数据库中管理国家

php - __construct() 必须实现接口(interface)错误

symfony - 如何通过 Swagger Decorator 在 API 平台中记录自定义 POST 操作?

security - symfony2 安全角色

c++ - 使用 Cygwin 在 Netbeans IDE 中运行的基本 C++ 程序出错

PHP Paypal 动态传递多个项目

php - mongodb在php中对聚合进行排序

php - <a> 标签上的 "download"属性在 IE、Safari 或 Opera 上不起作用

c - 为什么输入 4*x 或更多符号数字时会出现此代码错误?将16位数字转换为10位数字

c# - C# try catch 并返回提示