Autor | Zpráva | ||
---|---|---|---|
Majkelju Profil |
#1 · Zasláno: 4. 12. 2012, 09:52:27
Dobrý den,
mám kus textu, např 5*100/4. Jak zařídím, aby jsem z tohoto stringu vytvořil "výpočet", tudíž aby výstupem bylo 125 ? Počet a druh znamének může být pokaždé jiný. |
||
1Pupik1989 Profil |
#2 · Zasláno: 4. 12. 2012, 10:07:14
Funkcí eval.
|
||
Joker Profil |
#3 · Zasláno: 4. 12. 2012, 10:20:27
Majkelju:
Záleží o jaký text jde a odkud se vezme. Pokud to je od návštěvníka stránky, tak si na to vyrobit parser. Jestli jde o data ze spolehlivého místa a můžete se upsat krví, že s nimi nikdy nemůže být žádný problém, tak eval. 1Pupik1989: Eval je potenciálně velmi nebezpečná funkce. Nikdy nedoporučujte použít eval bez varování před potenciálními riziky. |
||
Majkelju Profil |
Joker: Jde o text uložený v databázi (který jsem do ní předtím naimportoval z xml, které je předem kontrolováno validátorem), který obsahuje tagy. Výběr z těch tagů už mám, uloží se mi to do pole stringů a jednotlivé stringy jsou právě ty výpočty, které potřebuju dostat do čísel... Zkusím to eval..
EDIT: Tak jsem projel pár příkladů a info o tom, co eval() dělá, a vůbec jsem tu funkci nepochopil...k čemu mi je v tomhle případě dobrá? Mohli byste uvést nějaký příklad? Případně ten parser je co? Jak se to tvoří? |
||
Joker Profil |
#5 · Zasláno: 4. 12. 2012, 10:59:17
Majkelju:
Parser prostě projde ten řetězec, identifikuje znamínka, to mezi nimi převede na čísla a udělá výpočet. To eval bude fungovat jen v případě, že ty výpočty jsou výrazy v PHP (což pokud tam bude +-*/ asi fungovat bude). Příklad: $vstup = "5*100/4"; eval('$vystup = '.$vstup.';'); // $vystup = 125 Ale připomínám, že eval vyhodnotí jakýkoli PHP kód, takže: $vstup = 'unlink("index.php")'; eval('$vystup = '.$vstup.';'); A zároveň pokud vstup nebude dávat platný kód, nebude to fungovat (nic se nespočítá a vrátí se false). |
||
Majkelju Profil |
Joker: aha, takže ten parser se asi dělá pomocí regulárních výrazů... OK, takhle už je mi to jasný, díky moc ;) Ale zkusím to tím parserem, eval() mi nějak nefunguje ani když to dělám podle tohohle příkladu...Vůbec se neukáže obsah modálního okna, ve kterém mám textfield s těmi čísly...
|
||
1Pupik1989 Profil |
#7 · Zasláno: 4. 12. 2012, 13:51:38
Já vím, že eval je nebezpečný. Já jen odpověděl na otázku. Šlo by ověřit, jestli vstup jsou čísla a matematické znaky. Nicméně parser bude efektivnější.
|
||
Časová prodleva: 11 let
|
0