PHP sprintf กำลังหลบหนี


184

ฉันต้องการผลลัพธ์ต่อไปนี้: -

กำลังจะหัก 50% ของ€ 27.59 จากบัญชีเติมเงินของคุณ

เมื่อฉันทำอะไรเช่นนี้: -

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

แต่มันทำให้ฉันมีข้อผิดพลาดนี้vsprintf() [function.vsprintf]: Too few arguments in ...เพราะมันพิจารณา%ใน50%ยังสำหรับการทดแทน ฉันจะหนีมันได้อย่างไร


1
@Col กระสุนคำถามของฉันเกี่ยวกับ vsprintf ไม่ใช่ printf ฉันใช้สิ่งนี้เป็นครั้งแรกและไม่สามารถถือว่าความคล้ายคลึงกันระหว่างทั้งสองได้ อย่างไรก็ตามการค้นหาescapeหรือescapingทั้งสองอย่างphp.net/printfและphp.net/vsprintfทั้งคู่ไม่แสดงคำตอบทันที เมื่อฉันค้นหา%%มันแสดงคำตอบใน php.net/printf แต่ฉันไม่รู้เกี่ยวกับ%%!!! คุณค้นหาคำตอบที่นั่นก่อนการลงคะแนนหรือไม่
Sandeepan Nath

@sandeepan: อยู่ในครอบครัวเดียวกันของฟังก์ชั่นเป็นvsprintf printfเอกสารที่ถูกต้องที่จะหารูปแบบ แต่เป็นphp.net/sprintf ทั้งสองหน้าชี้ไปที่: "ดู sprintf () สำหรับคำอธิบายของรูปแบบ" อย่างน้อยคุณไม่คลิกมันเหรอ?
BoltClock

5
@Col กระสุนตกลงได้แล้วลองใช้ php.net/sprintf คำตอบอยู่ที่ไหน ลงครึ่งหนึ่งแล้วหน้าWith printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.มีอะไรให้โหวตที่นี่? มันไม่ชัดเจนสำหรับฉันเช่นเดียวกับคุณ หากคุณพบคำถามที่ซ้ำกันคุณสามารถเขียนลิงค์ได้ดีขึ้น แต่ฉันมั่นใจว่าหลายคนจะพบว่าคำถามนี้มีประโยชน์ แต่คุณจะไม่ยอมรับและคุณจะยังพูดอะไรบางอย่างอยู่
Sandeepan Nath

โอ้ฉันคิด
ว่าความ

3
ดังนั้นควรมีการตั้งค่าสถานะสำหรับการตอบสนอง RTFM มันเกือบจะเหมือนคนหมุนรอบเพื่อให้พวกเขาสามารถบอกให้คนอ่านเอกสาร เขาต้องการความช่วยเหลือและถามคำถามจากนั้นมีคนตอบอย่างเป็นประโยชน์และได้รับคะแนน โลกนี้ดำเนินต่อไปและอินเทอร์เน็ตก็เคยชินกับผลประโยชน์ของใครบางคน ในขณะเดียวกันฉันก็รู้สึกร้อนแรงกับการโต้แย้งสองปี
rob5408

คำตอบ:


344

หนีไปกับคนอื่น%:

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

22
sprintf ("SELECT * จาก ... WHERE ชื่อเช่น '%%% s %%% s %%'", $ fname, $ lname); - น่าเกลียด แต่ใช้งานได้!
Jan Hettich

1
สิ่งนี้ใช้ได้กับ Ruby
Jamie Cook

คุณสามารถเพิ่มส่วนนั้นด้วย "% s" อีกอัน: sprintf ('จาก% s คุณจะได้% s', '
some

คุณจะหลบหนีได้อย่างไรถ้าสตริงเป็นแบบไดนามิก? สมมติว่าsprintf('This is %s.', the_title())
budji

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

3

มันง่ายมาก ๆ.

ใส่อีกอัน%ไว้ด้านหน้าของต้นฉบับ%เพื่อหลบหนี

ตัวอย่างเช่น,

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

เอาท์พุท:

%d of 23 = 23

1

เกี่ยวกับสิ่งนี้:

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

เพียงเพิ่มเครื่องหมายเปอร์เซ็นต์ของคุณในอาเรย์ตัวแปรของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.