2010-09-08 28 views
136

Tôi muốn đầu ra sau đây: -PHP sprintf thoát%

Về trích 50% € 27,59 từ tài khoản Top-Up của bạn.

khi tôi làm điều gì đó như thế này: -

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

Nhưng nó mang lại cho tôi lỗi này vsprintf() [function.vsprintf]: Too few arguments in ... vì nó coi % trong 50% cũng để thay thế. Làm thế nào để thoát khỏi nó?

+1

@Col. Shrapnel Câu hỏi của tôi là về vsprintf không printf, tôi đang sử dụng này lần đầu tiên và không thể giả định sự giống nhau giữa hai. Tuy nhiên, tìm kiếm 'escape' hoặc' escaping' trong cả hai 'php.net/printf' và' php.net/vsprintf' đều không hiển thị câu trả lời ngay lập tức. Khi tôi tìm kiếm '%%' nó hiển thị câu trả lời trong php.net/printf nhưng tôi không biết về '%%' !!! Bạn đã tìm kiếm câu trả lời ở đó trước khi downvoting? –

+0

@sandeepan: 'vsprintf' thuộc cùng một nhóm chức năng như' printf'. Tuy nhiên, tài liệu chính xác để tìm định dạng là http://www.php.net/sprintf. Cả hai trang đều trỏ đến nó: "Xem sprintf() để biết mô tả về định dạng". Bạn có ít nhất nhấp vào nó không? – BoltClock

+5

@Col. Shrapnel ok tốt chúng ta hãy php.net/sprintf, đâu là câu trả lời? Nó nằm ở giữa trang 'Với hàm printf() và sprintf(), ký tự thoát không phải là dấu gạch chéo ngược '\' mà là '%'. 'Có gì để downvote ở đây? Đó không phải là điều hiển nhiên đối với tôi như đối với bạn. Nếu bạn tìm thấy câu hỏi trùng lặp, bạn có thể viết liên kết tốt hơn. Nhưng tôi chắc chắn nhiều người sẽ tìm thấy câu hỏi này hữu ích. Nhưng bạn sẽ không chấp nhận điều đó và bạn vẫn sẽ nói điều gì đó, tôi biết. –

Trả lời

250

thoát nó với % khác:

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

sprintf ("SELECT * FROM ... WHERE tên LIKE '%%% s %%% s %%'", $ fname, $ lname); - Xấu xí nhưng nó hoạt động! –

+1

Điều này cũng áp dụng cho Ruby –

+0

bạn có thể thêm phần đó bằng "% s" khác: sprintf ('từ% s bạn có thể nhận% s', 'something', '50% ') –

0

Nó là rất dễ dàng.

Đặt một số % khác trước % ban đầu để thoát.

Ví dụ,

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

Output:

%d of 23 = 23 
0

gì về điều này:

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

Chỉ cần thêm ký hiệu phần trăm của bạn trong các biến mảng của bạn