Chạy nước rút PHP thoát%


184

Tôi muốn đầu ra sau: -

Sắp khấu trừ 50% € 27,59 từ tài khoản Top-Up của bạn.

khi tôi làm một cái 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ó xem xét %trong 50%cũng để thay thế. Làm thế nào để tôi thoát khỏi nó?


1
@Col. Mảnh đạn Câu hỏi của tôi là về vsprintf không phải printf, tôi đang sử dụng lần đầu tiên và không thể cho rằng sự giống nhau giữa hai. Tuy nhiên, tìm kiếm escapehoặc escapingtrong cả hai php.net/printfphp.net/vsprintfcả hai 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 bỏ phiếu?
Sandeepan Nath

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

5
@Col. Mảnh vỡ ok ok chúng ta hãy dùng php.net/sprintf, câu trả lời ở đâu? Nó nằm ở giữa trang With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.Có gì để downvote ở đây? Nó chỉ không rõ ràng với tôi như nó là với bạn. Nếu bạn tìm thấy một 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ẽ 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.
Sandeepan Nath

ồ tôi nghĩ bình luận thứ hai là của Đại tá Shrapnel, xin lỗi
Sandeepan Nath

3
SO nên có một cờ cho các phản ứng RTFM. Nó gần giống như mọi người troll chỉ để họ có thể bảo mọi người đọc tài liệu. Anh ta cần giúp đỡ và hỏi một câu hỏi và sau đó ai đó trả lời hữu ích và có điểm cho nó. Thế giới đã tiếp tục và internet đã được sử dụng để mang lại lợi ích cho ai đó. Trong khi đó tôi đang nóng lên vì một cuộc cãi vã hai năm tuổi.
rob5408

Câu trả lời:


343

Thoát khỏi nó với cái khác %:

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

22
sprintf ("CHỌN * TỪ ... Tên ở đâu THÍCH '%%% s %%% s %%'", $ fname, $ lname); - Xấu xí nhưng nó hoạt động!
Jan Hettich

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

bạn có thể thêm phần đó bằng "% s" khác: sprintf ('từ% s bạn có thể nhận được% s', 'cái gì đó', '50% ')
Lukas Liesis

Làm thế nào để bạn thoát nó nếu chuỗi động? Hãy nói,sprintf('This is %s.', the_title())
budji

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

3

Nó rất dễ.

Đặt một cái khác %ở phía trước của bản gốc %để thoát khỏi nó.

Ví dụ,

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

Đầu ra:

%d of 23 = 23

1

Cái này thì sao:

$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 dấu phần trăm của bạn vào mảng biến của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.