PHP sprintf kaçış%


184

Aşağıdaki çıktıyı istiyorum: -

Top-Up hesabınızdan 27.59 € 'nun% 50'sini düşmek üzeredir.

böyle bir şey yaptığımda: -

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

Ama bana bu hata veriyor vsprintf() [function.vsprintf]: Too few arguments in ...o kabul ettiği için %in 50%değiştirilmesi için de. Nasıl kaçarım?


1
@Col. Shrapnel Benim sorum vfrintf printf değil, bu ilk kez kullanıyorum ve ikisi arasındaki benzerliği kabul edemiyorum. Ancak, arama escapeveya escapingher ikisi de php.net/printfve php.net/vsprintfikisi de hemen cevap göstermez. Aradığımda %%cevabı php.net/printf içinde gösteriyor ama bilmiyordum %%!!! Cevabı indirmeden önce orada aradınız mı?
Sandeepan Nath

@sandeepan: vsprintfile aynı işlev ailesine aittir printf. Biçimi bulmak için doğru belgeler php.net/sprintf'dir . Her iki sayfa da bunu gösteriyor: "Biçim açıklaması için bkz. Sprintf ()." En azından tıklamadın mı?
BoltClock

5
@Col. Şarapnel ok tamam php.net/sprintf alalım, cevap nerede? Sayfanın With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.yarısında Buraya oy vermek için ne var? Sana olduğu kadar benim için de o kadar açık değildi. Yinelenen bir soru bulursanız, bağlantıyı daha iyi yazabilirsiniz. Ama eminim ki birçok kişi bu soruyu faydalı bulacaktır. Ama bunu kabul etmeyeceksin ve hala bir şeyler söyleyeceksin, biliyorum.
Sandeepan Nath

Ah, ikinci yorumun Col Shrapnel tarafından olduğunu düşündüm, üzgünüm
Sandeepan Nath

3
SO RTFM yanıtları için bir bayrak olmalıdır. Neredeyse insanlar troll gibi, böylece insanlara belgeleri okumasını söyleyebiliyorlar. Yardıma ihtiyacı vardı ve bir soru sordu ve sonra birisi yardımsever bir şekilde cevap verdi ve bunun için puan aldı. Dünya devam etti ve internet birinin yararına kullanıldı. Bu arada iki yıllık bir tartışma üzerinde ısınıyorum.
rob5408

Yanıtlar:


344

Başka biriyle kaçış %:

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

22
sprintf ("SELECT * FROM ... NEREDE '%%% s %%% s %%'", $ fname, $ lname); - Çirkin ama işe yarıyor!
Jan Hettich

1
Bu durum Ruby
Jamie Cook için

bu parçayı başka bir "% s" ile ekleyebilirsiniz: sprintf ('% s'den% s alabilirsiniz', 'bir şey', '% 50')
Lukas Liesis

Dize dinamikse nasıl kaçarsınız? Diyelim ki,sprintf('This is %s.', the_title())
Budji

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

3

Bu çok kolay.

Kaçmak %için orijinalin önüne bir tane daha koyun %.

Örneğin,

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

Çıktı:

%d of 23 = 23

1

Peki buna ne dersin:

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

Değişkenler dizinize yüzde işaretinizi eklemeniz yeterlidir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.