【问题标题】:PHP sprintf escaping %PHP sprintf 转义 %
【发布时间】:2011-04-09 15:59:11
【问题描述】:

我想要以下输出:-

即将从您的充值账户中扣除 27.59 欧元的 50%。

当我做这样的事情时:-

$variablesArray[0] = '€';
$variablesArray[1] = 27.59;
$stringWithVariables = 'About to deduct 50% of %s %s from your Top-Up account.';
echo vsprintf($stringWithVariables, $variablesArray);

但它给了我这个错误vsprintf() [function.vsprintf]: Too few arguments in ...,因为它认为50% 中的% 也可以替换。我该如何逃脱它?

【问题讨论】:

  • @Col。弹片我的问题是关于 vsprintf 而不是 printf,我是第一次使用它,无法假设两者之间的相似性。但是,在php.net/printfphp.net/vsprintf 中搜索escapeescaping 并不会立即显示答案。当我搜索 %% 时,它会在 php.net/printf 中显示答案,但我不知道 %% !!!在投反对票之前,您是否在那里搜索过答案?
  • @sandeepan: vsprintfprintf 属于同一个函数族。不过,找到该格式的正确文档是 php.net/sprintf。两页甚至都指向它:“有关格式的描述,请参见 sprintf()。”你至少没有点击它吗?
  • @Col。弹片好吧好吧让我们拿php.net/sprintf,答案在哪里?它在页面的中间With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.这里有什么要反对的?这对我来说并不像对你那么明显。如果您发现重复的问题,您可以更好地编写链接。但我相信很多人会发现这个问题很有帮助。但你不会接受,你还是会说些什么,我知道。
  • 哦,我以为第二条评论是由 Shrapnel 上校写的,抱歉
  • SO 应该有一个用于 RTFM 响应的标志。这几乎就像人们进行巨魔一样,只是为了告诉人们阅读文档。他需要帮助并提出了一个问题,然后有人提供了帮助并得到了积分。世界在继续,互联网被用来为某人谋福利。与此同时,我对一场长达两年的争论感到很激烈。

标签: php escaping printf


【解决方案1】:

用另一个% 逃脱它:

$stringWithVariables = 'About to deduct 50%% of %s %s from your Top-Up account.';

【讨论】:

  • sprintf("SELECT * FROM ... WHERE name LIKE '%%%s%%%s%%'", $fname, $lname); -- 丑陋但有效!
  • 你可以用另一个“%s”添加那个部分:sprintf('from %s you can get %s', 'something', '50%')
  • 如果字符串是动态的,你如何转义它?比方说,sprintf('This is %s.', the_title())
  • @madastro str_replace('%', '%%', the_title())
  • 可用性恐怖的一个很好的例子;)
【解决方案2】:

这很容易。

在原来的%前面再放一个%来转义。

例如,

$num=23;
printf("%%d of 23 = %d",$num);

输出:

%d of 23 = 23

【讨论】:

    【解决方案3】:

    要在您的语言字符串中添加 %,您只需添加 double percent %% 而不是一个

    【讨论】:

      【解决方案4】:

      这对我有用:

      sprintf(
          '%s (Cash Discount: %%%s, Deferred Discount: %%%s)',
          $segment->name,
          $segment->discount_cash,
          $segment->discount_deferred,
      )
      
      // Gold (Cash Discount: %25, Deferred Discount: %20)
      

      【讨论】:

        【解决方案5】:

        这个呢:

        $variablesArray[0] = '%';
        $variablesArray[1] = '€';
        $variablesArray[2] = 27.59;
        $stringWithVariables = 'About to deduct 50%s of %s %s from your Top-Up account.';
        echo vsprintf($stringWithVariables, $variablesArray);
        

        只需在变量数组中添加百分号

        【讨论】:

        • 问题是如何 sprintf 转义 %。
        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        相关资源
        最近更新 更多