PHP sprintf转义%


184

我想要以下输出:-

将从您的充值帐户中扣除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 ...因为它也考虑使用%in 50%进行替换。我该如何逃脱?


1
@Col。Shrapnel我的问题是关于vsprintf而不是printf,我是第一次使用它,不能假定两者之间的相似性。然而,搜索escapeescaping两个php.net/printfphp.net/vsprintf两个不立即显示答案。当我搜索%%它时,它在php.net/printf中显示了答案,但是我不知道%%!您是否在否决票之前搜索过答案?
Sandeepan Nath 2010年

@sandeepan:与vsprintf属于同一功能族printf。但是,找到格式的正确文档是php.net/sprintf。这两页甚至都指向它:“有关格式的说明,请参见sprintf()。” 您没有至少点击它吗?
BoltClock

5
@Col。弹片好吧,让我们采用php.net/sprintf,答案在哪里?它在页面的一半下方,With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.这里有什么地方需要投票?对我而言,对您而言,这并不是那么明显。如果发现重复的问题,则可以更好地编写链接。但是我相信很多人会发现这个问题会有所帮助。但是,您不会接受的,我仍然会说些什么。
Sandeepan Nath

哦,我认为第二条评论是Shrapnel上校,对不起
Sandeepan Nath 2010年

3
SO应该具有用于​​RTFM响应的标志。这几乎就像人们巨魔一样,使他们可以告诉人们阅读文档。他需要帮助,并提出了一个问题,然后有人提供了有帮助的答案并为此获得了积分。世界在不断发展,互联网已习惯于某人的利益。同时,我因两年前的争论而变得很热烈。
rob5408

Answers:


343

与另一个转义%

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

22
sprintf(“ SELECT * FROM ... WHERE name LIKE'%%% s %%% s %%'”,$ fname,$ lname); -丑陋,但是行得通!
日1月Hettich

1
这也适用于Ruby
Jamie Cook

您可以在该部分添加另一个“%s”:sprintf('从%s获得%s','something','50%')
Lukas Liesis 2015年

如果字符串是动态的,该如何转义?假设,sprintf('This is %s.', the_title())
budji 2015年

7
@madastrostr_replace('%', '%%', the_title())
伊万卡

3

这很容易。

%在原件前面放另一张%以免丢失。

例如,

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

输出:

%d of 23 = 23

1

那这个呢:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.