2010-09-08 124 views
136

我想以下的输出: -PHP的sprintf逃逸%

关于从您补足账户中扣除的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); 

但因为它认为在50%也更换%它给了我这个错误vsprintf() [function.vsprintf]: Too few arguments in ...。我如何逃避它?

+1

@col。 Shrapnel我的问题是关于vsprintf不是printf,我第一次使用这个,并且不能假设两者之间的相似性。然而,在'php.net/printf'和'php.net/vsprintf'中搜索'escape'或'escaping'都不会立即显示答案。当我搜索'%%'时,它会在php.net/printf中显示答案,但我不知道'%%'!!!在投票前您是否搜索过答案? – 2010-09-08 10:40:56

+0

@sandeepan:'vsprintf'属于与'printf'相同的函数族。但是,找到格式的正确文档是http://www.php.net/sprintf。这两个页面甚至指向它:“请参阅sprintf()以获取格式的描述。”你没有至少点击它吗? – BoltClock 2010-09-08 10:43:43

+5

@Col。 Shrapnel ok好吧,让我们看看php.net/sprintf,答案在哪里?它在页面的一半处使用printf()和sprintf()函数,转义字符不是反斜线'\'而是'%'。'这里有什么值得注意的地方?这对我来说并不像对你那么明显。如果您发现重复的问题,您最好写下链接。但我相信很多人会发现这个问题很有帮助。但是我知道,你不会接受,你仍然会说些什么。 – 2010-09-08 10:49:04

回答

250

与另一%退出:

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

sprintf(“SELECT * FROM ... WHERE name LIKE'%%% s %%% s %%'”,$ fname,$ lname); - 丑但它的作品! – 2011-10-08 22:57:20

+1

这也适用于Ruby – 2013-01-31 01:22:00

+0

您可以使用另一个“%s”添加该部分:sprintf('from%s您可以获得%s','something','50%') – 2015-05-12 02:35:38

0

这是很容易的。

把另一个%放在原来的%的前面以逃避它。

例如,

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

输出:

%d of 23 = 23 
0

这个怎么样:

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

只需添加您百分号的变量数组