PHP спринт уникнути%


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. Shrapnel Моє запитання про vsprintf not printf, я використовую це вперше і не можу припустити подібності між ними. Однак пошук escapeабо escapingв обох, php.net/printfі в php.net/vsprintfобох випадках не відображає відповідь відразу. Коли я шукаю %%його, ви знайдете відповідь на php.net/printf, але про це я не знав %%!!! Ви шукали відповідь там, перш ніж звертатись до зворотного збору?
Сандепіан Натх

@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,

о, я подумав, що другий коментар був полковником Шрапнелем, вибачте
Sandeepan Nath

3
Так повинен бути прапор для відповідей RTFM. Це майже як люди тролять просто так, щоб вони могли сказати людям читати документи. Йому була потрібна допомога і поставлена ​​запитання, а потім хтось корисно відповів і отримав бали за це. Світ продовжувався, а Інтернет використовувався на чиюсь користь. Тим часом я нагріваюся над дворічним аргументом.
rob5408

Відповіді:


344

Уникнути цього за допомогою іншого %:

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

22
sprintf ("SELECT * FROM ... WHERE name LIKE '%%% s %%% s %%'", $ fname, $ lname); - Некрасиво, але це працює!
Ян Хеттіч

1
Це стосується і Рубі
Джеймі Кука,

ви можете додати цю частину ще одним "% s": sprintf ("від% s ви можете отримати% s", "щось", "50%")
Лукас Лієсіс,

Як уникнути цього, якщо рядок динамічний? Скажімо,sprintf('This is %s.', the_title())
budji

7
@madastrostr_replace('%', '%%', the_title())
Іванка Тодорова

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

Просто додайте свій знак відсотка у масив змінних

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.