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 ...、それは考慮するため%での50%交換のためにも。どうすれば脱出できますか?


1
@Col。Shrapnel私の質問は、printfではなくvsprintfについてです。私はこれを初めて使用し、2つの間の類似性を想定できませんでした。ただし、検索escapeまたはescaping両方で検索してもphp.net/printfphp.net/vsprintfすぐには答えが表示されません。検索する%%と、php.net / printfに回答が表示されますが、知りませんでした%%!!! 反対投票する前にそこで回答を検索しましたか?
Sandeepan Nath

@sandeepan:vsprintfと同じ関数ファミリーに属しprintfます。ただし、形式を見つけるための正しいドキュメントはphp.net/sprintfです。どちらのページもそれを示しています:「フォーマットの説明についてはsprintf()を参照してください。」少なくともそれをクリックしませんでしたか?
BoltClock

5
@Col。Shrapnel ok ok php.net/sprintfを見てみましょう。答えはどこですか?それはページの半分With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.です。ここで反対投票するものは何ですか?それはあなたにとってそうであったように、私にはそれほど明白ではありませんでした。重複する質問を見つけた場合は、リンクを記述してください。しかし、私は多くの人がこの質問が役立つと思うと思います。しかし、あなたはそれを受け入れず、あなたはまだ何かを言うでしょう、私は知っています。
Sandeepan Nath

ああ、私は2番目のコメントは大佐シュラプネル、申し訳ありませんで思った
Sandeepanナス

3
SOにはRTFM応答のフラグが必要です。まるで人々がドキュメントを読むように言うことができるように、人々がトロールするようなものです。彼は助けを必要とし、質問をした後、誰かが助けて答え、それに対するポイントを得ました。世界は進み、インターネットは誰かの利益のために使われました。その間、私は2年前の議論に熱くなっています。
rob5408 2013

回答:


344

別のものでそれをエスケープします%

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

22
sprintf( "SELECT * FROM ... WHERE name LIKE '%%% s %%% s %%'"、$ fname、$ lname); -醜いですが、うまくいきます!
Jan Hettich、2011年

1
これはRubyにも適用されます
Jamie Cook

別の「%s」でその部分を追加できます:sprintf( '%sから%sを取得できます'、 '何か'、'50% ')
Lukas Liesis

文字列が動的な場合、どうやってそれをエスケープしますか?レッツたとえば、sprintf('This is %s.', the_title())
budji

7
@madastrostr_replace('%', '%%', the_title())
Ivanka Todorova

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

変数配列にパーセント記号を追加するだけです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.