Autor | Zpráva | ||
---|---|---|---|
krteczek Profil |
#1 · Zasláno: 2. 1. 2007, 11:49:26
Dobrý den, jde pomocí PCRE funkcí zjistit délka řetězce? ověřit délku pomocí preg_match umím, potřeboval byc ale i zjistit jak dlouhý ten řetězec je...
ověření délky řetězce (proty co to zajímá):
krteczek |
||
Alphard Profil |
#2 · Zasláno: 2. 1. 2007, 11:52:21
nestačilo by strlen?
http://cz.php.net/manual/cs/function.strlen.php |
||
Eddie Profil |
#3 · Zasláno: 2. 1. 2007, 11:52:40
dlzku retazca zistis pomocou fce strlen();
|
||
krteczek Profil |
#4 · Zasláno: 2. 1. 2007, 12:17:49
no to sice jo jenze u utf-8:
strlen("žžžžžž") != 6 mb_strlen("žžžžžž", "utf8") == 8 ale není dostupné všude :-( takže hledám řešení jak to udělat |
||
Alphard Profil |
#5 · Zasláno: 2. 1. 2007, 12:36:41
možná tohle: :-)
echo strlen(iconv("UTF-8", "ISO-8859-2", "žžžžžž")); |
||
Acci Profil |
#6 · Zasláno: 2. 1. 2007, 12:37:19
krteczek
mb_strlen je v PHP už od verze 4.0.6, s tím by snad neměl být nikde problém. |
||
D1ce Profil |
#7 · Zasláno: 2. 1. 2007, 19:56:24 · Upravil/a: D1ce
Acci
To ano, ale všude přeci není povolená. krteczek Tadu je co jsem zbastlil:
Avšak co me děsí je, že každá fce vrací jiný počet znaků. A rada na závěr? Používejte preg_strlen(), protože ta jediná vrací správný počet znaků. Howg. |
||
DoubleThink Profil * |
#8 · Zasláno: 2. 1. 2007, 21:03:27 · Upravil/a: DoubleThink
Používejte preg_strlen(), protože ta jediná vrací správný počet znaků.
Obávám se, že naopak. Pojďme to rozebrat. strlen() neuvažuji - unicode řetězce počítá špatně, to je všeobecně známo (počítá každý byte). mb_strlen() to spočítal správně, pokud pracuješ ve Windowsu - ten má jak známo konec řádku \ r \ n, tedy 2 znaky. preg_strlen() to spočítal špatně, protože konce řádků jsou plnohodnotné znaky a ve scriptech je s nimi počítáno. |
||
D1ce Profil |
DoubleThink
mb_strlen() to spočítal správně, pokud pracuješ ve Windowsu - ten má jak známo konec řádku \r\n, tedy 2 znaky. Ano mb_strlen() to spočítal správně, ale přeci jste se sekl mistře. :P Windowsu - ten má jak známo konec řádku \r\n Ale ne-e tak je to na *nixu, Widle mají \n\r ! představte si. Taty je opravená fce preg_strlen():
Jinak díky moc za upozornění. Sám bych na to nepříšel. :) A doporučení? Use preg_strlen(); . *THUMBS_UP* |
||
tiso Profil |
#10 · Zasláno: 3. 1. 2007, 03:10:10
D1ce
<CR><LF> - DOS + Windows <LF> - Unix <CR> - MAC |
||
llook Profil |
#11 · Zasláno: 3. 1. 2007, 08:52:35 · Upravil/a: llook
Jenom doplním:
<CR> = \r = HEX 0D = DEC 13 <LF> = \n = HEX 0A = DEC 10 Schválně si zobraz hexadecimálně nějaký textový soubor, v těch okenních najdeš nové řádky jako sekvenci 0D 0A (tj. \r\n) a v unixových pouze 0A (tj. \n). Ono se to týká spíše aplikací než OS, ale většinou se tato konvence dodržuje. Jak je to na Macu nevím, protože v současnosti Apple vyrábí cosi, co lze označit za PC, Mac i Unix zároveň. Ale dříve tam bylo zažité <CR>, tedy \r. |
||
krteczek Profil |
#12 · Zasláno: 3. 1. 2007, 16:22:18
Pro všechny: Díky za tipy, rady i řešení, krteczek
|
||
Časová prodleva: 6 dní
|
|||
D1ce Profil |
#13 · Zasláno: 9. 1. 2007, 21:17:19
Velice se omlouvám za zpoždění, ale pokušel jsem se z moderátorem diskuse domluvit na opravě editace, která mi bohužel nefunguje.
Tadytohle by měla být finální, doufám, že konečně 100% funkční verze:
|
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0