PHP sprintf lolos%

184

Saya ingin output berikut: -

Akan mengurangi 50% dari € 27,59 dari akun Top-Up Anda.

ketika saya melakukan sesuatu seperti ini: -

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

Tapi itu memberi saya kesalahan ini vsprintf() [function.vsprintf]: Too few arguments in ...karena menganggap %di 50%juga untuk penggantian. Bagaimana saya bisa menghindarinya?

Sandeepan Nath
sumber
1
@Col. Pecahan peluru Pertanyaan saya adalah tentang vsprintf bukan printf, saya menggunakan ini untuk pertama kalinya dan tidak dapat mengasumsikan kesamaan antara keduanya. Namun, pencarian escapeatau escapingkeduanya php.net/printfdan php.net/vsprintfkeduanya tidak segera menunjukkan jawaban. Ketika saya mencari %%itu menunjukkan jawabannya di php.net/printf tapi saya tidak tahu %%!!! Apakah Anda mencari jawaban di sana sebelum downvoting?
Sandeepan Nath
@sandeepan: vsprintftermasuk dalam keluarga fungsi yang sama dengan printf. Dokumentasi yang benar untuk menemukan formatnya adalah php.net/sprintf . Kedua halaman bahkan menunjuk ke sana: "Lihat sprintf () untuk deskripsi format." Setidaknya Anda tidak mengkliknya?
BoltClock
5
@Col. Shrapnel ok baiklah mari kita ambil php.net/sprintf, di mana jawabannya? Ini setengah jalan ke bawah halaman. With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.Apa yang harus di-downvote di sini? Bagi saya itu tidak terlalu jelas bagi saya. Jika Anda menemukan pertanyaan rangkap, Anda dapat menulis tautan dengan lebih baik. Tetapi saya yakin banyak orang akan menganggap pertanyaan ini bermanfaat. Tetapi Anda tidak akan menerima itu dan Anda masih akan mengatakan sesuatu, saya tahu.
Sandeepan Nath
oh saya pikir komentar kedua adalah oleh Kolonel Shrapnel, maaf
Sandeepan Nath
3
SO harus memiliki bendera untuk respons RTFM. Ini hampir seperti orang-orang troll supaya mereka dapat memberitahu orang-orang untuk membaca dokumen. Dia membutuhkan bantuan dan mengajukan pertanyaan dan kemudian seseorang menjawab dengan membantu dan mendapat poin untuk itu. Dunia terus berjalan dan internet digunakan untuk kepentingan seseorang. Sementara itu saya semakin panas selama dua tahun argumen.
rob5408

Jawaban:

344

Kabur dengan yang lain %:

$stringWithVariables = 'About to deduct 50%% of %s %s from your Top-Up account.';
BoltClock
sumber
22
sprintf ("SELECT * FROM ... WHERE name LIKE '%%% s %%% s %%'", $ fname, $ lname); - Jelek tapi berhasil!
Jan Hettich
1
Ini juga berlaku untuk Ruby
Jamie Cook
Anda dapat menambahkan bagian itu dengan "% s" lainnya: sprintf ('dari% s Anda bisa mendapatkan% s', 'sesuatu', '50% ')
Lukas Liesis
Bagaimana Anda menghindarinya jika string itu dinamis? Katakanlah,sprintf('This is %s.', the_title())
budji
7
@madastrostr_replace('%', '%%', the_title())
Ivanka Todorova
3

Ini sangat mudah.

Letakkan yang lain %di depan dokumen asli %untuk menghindarinya.

Sebagai contoh,

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

Keluaran:

%d of 23 = 23

sumber
1

Bagaimana dengan ini:

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

Cukup tambahkan tanda persen Anda di array variabel Anda

3Eighty
sumber