Autor | Zpráva | ||
---|---|---|---|
sowhatchawant Profil * |
#1 · Zasláno: 31. 12. 2012, 17:02:01
Zdravim,
už jsem opravdu nešťastný, zkoušel jsem snad všechno a pořád mi to nejde... Načítám nějaký data ze souboru (.csv),potřebuji kontrolovat, zda soubor obsahuje na určitých místech číselné hodnoty - od 1 do 9999... Nějakým způpsobem pomocí explode() atd. vybírám tato čísla (zatím jsou uložené jako string) a ty bych potřeboval kontrolovat. Bohužel, is_numeric() si tím neví moc rady... Vrací false u čísel >= 10. Zkoušel jsem používat : $value = trim($value) if ( ctype_digit ( $value ) ) { .... } asi po 2 hodinách, co jsem se tím mořil, jsem udělal vlastní is_numeric : public function custom_is_numeric ( $str ) { $num = intval ( $str ) ; print_r ( $num . " |VS| " .$str ); if ( $num > 0 ) { return 1; } return 0; } tohle mi fungovalo krásně až do doby, než jsem se podíval, co porovnává. intval ( $str ) převede opět jenom první znak na čislici a zbytek neřeší, takže mi to string "10" převede na číslo 1, což nechci. Nevíte někdo jak to vyřešit? Už mě to opravdu nebaví. Díky, Martin |
||
Jan Tvrdík Profil |
sowhatchawant:
is_numeric rozhodně vrátí např. pro "10" true . To že ti to vrátí false znamená, že ten řetězec obsahuje nutně něco jiného. Proveď schválně hex dump toho řetězce, např. pomocí
for ($i = 0; $i < strlen($string); $i++) { echo dechex(ord($string[$i])) . " "; } |
||
sowhatchawant Profil * |
#3 · Zasláno: 31. 12. 2012, 17:58:13
Jj mělo mě to napadnout dřív, dává to za každý znak 0, např: 13 = 31 0 33
Koukám, že ten čtený soubor je v UCS-2 Big Endian a já to zpracovávám v UTF-8, to bude asi nejspíš tím, že ? :D Díky |
||
Jan Tvrdík Profil |
sowhatchawant:
Ano, to bude tím. Bude stačit převést řetězec z UCS-2 Big Endian do UTF-8. $s = iconv('UCS-2BE', 'UTF-8', $s); // snad takto Ještě doplním: pozor na trim() ! Výstup pro 13 má být 0 31 0 33 . Tím, že řetězec proženeš přes trim je odstraněn počáteční NULL byte a kódování je tak poškozeno. Konverzi je tedy potřeba provést ideálně hned po načtení toho souboru.
|
||
sowhatchawant Profil * |
#5 · Zasláno: 1. 1. 2013, 16:16:36
Já mám trochu problém, že nevím v jakém kódování mi soubor přijde, může to být téměř cokoli, asi spíš odstraním ty nulové znaky z toho stringu...
Rozhodně děkuji za rady :) |
||
Časová prodleva: 11 let
|
0