2010-09-08 19 views
136

aşağıdaki çıktıyı istiyorum: -PHP sprintf kaçan%

Top-Up hesabından € 27.59% 50'sini düşeriz üzere.

Böyle bir şey yapmak oluşur: -

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

Ama değiştirme için de 50% yılında % gördüğü çünkü bana bu hatayı vsprintf() [function.vsprintf]: Too few arguments in ... verir. Nasıl kaçarım?

+1

@Col da yüzde işareti ekleyin. Shrapnel Benim sorum, printf değil vsprintf ile ilgili, bunu ilk defa kullanıyorum ve ikisi arasındaki benzerliği üstlenemedim. Ancak, her ikisi de 'php.net/printf' ve' php.net/vsprintf''de 'escape' veya' escaping' kelimelerini aramak hemen cevabı göstermez. "%%" için arama yaptığımda, php.net/printf içindeki cevabı gösterir, ancak %% 'yi bilmiyordum! İndirme işleminden önce cevabı aradınız mı? –

+0

@sandeepan: 'vsprintf', printf işleviyle aynı işlev ailesine ait. Formatı bulmak için doğru belgeler http://www.php.net/sprintf'dir. Her iki sayfa da buna işaret ediyor: "Biçimin bir açıklaması için sprintf() 'e bakınız." En azından tıklamadın mı? – BoltClock

+5

@Col. Şarapnel tamam iyi php.net/sprintf alalım, cevabı nerede? Printf() ve sprintf() fonksiyonlarıyla, karakterin yarısı ters eğik çizgi '\' değil, '%' dir. Burada reddetmek için ne var? Benim için olduğu kadar açık değildi. Yinelenen bir soru bulursanız, bağlantıyı daha iyi yazabilirsiniz. Ama eminim ki bu soruyu faydalı bulacaktır. Ama bunu kabul etmeyeceksin ve hala bir şeyler söyleyeceksin, biliyorum. –

cevap

250
başka % ile kaçış

: Bu çok kolay

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

sprintf ("SELECT * FROM ... WHERE adı LIKE '%%% s %%% s %%" ", $ fname, $ lname); - Çirkin ama işe yarıyor! –

+1

Bu, Ruby –

+0

için de geçerlidir, bu parçayı başka bir "% s" ile ekleyebilirsin: sprintf ('% s' den% s 'alabilirsin', 'bir şey', '% 50') –

0

. Başka bir % özgün % önüne koyun. Örneğin

,

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

Çıktı:

%d of 23 = 23 
0

Bunun neresi:

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

Sadece değişkenler dizisinin