具有转义字符的Symfony控制台输出

时间:2016-04-13 09:31:44

标签: php symfony console

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

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

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

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

输出:

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

显然反斜杠似乎是一种逃避角色,但如何逃脱呢?或者如何保留结束</info>标签的含义?

到目前为止,我尝试过:

  • addcslashes('My\String\', '\\') - 最后复制内部和单个fY:

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

    My&#92;String&#92;
    

1 个答案:

答案 0 :(得分:3)

<字符可以由您已经猜到的\转义。并且可以使用OutputFormatter from Symfony v3.0.3,v2.8.3,v2.7.10和v2.3.38转义尾部反斜杠{{3}}:

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);