Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
pmz
HV vaatleja
liitunud: 05.07.2008
|
22.11.2009 12:56:24
PHP: strlen() annab ä ö puhul vale stringi pikkuse |
|
|
Näiteks "täre tõg" ilma jutumärkideta on php arvates 10 märki pikk, tegelikult ainult 8. Kuidas saada õige pikkus?
|
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
22.11.2009 13:07:36
|
|
|
Mõned tühikud, mida pole märganud?
Proovi mida see sulle annab
<?php
$a = "täre tõg";
echo strlen($a);
?> |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
pmz
HV vaatleja
liitunud: 05.07.2008
|
22.11.2009 13:09:41
|
|
|
andrusny kirjutas: |
Mõned tühikud, mida pole märganud?
Proovi mida see sulle annab
<?php
$a = "täre tõg";
echo strlen($a);
?> |
|
10
|
|
tagasi üles |
|
 |
Jaffe
HV vaatleja
liitunud: 15.11.2004
|
22.11.2009 13:20:51
|
|
|
Asi selles, et ä ja õ on multibyte tähed ja tavaline strlen loeb byte, mitte tähti.
Et õiget asja kätte saada utf-8 puhul näiteks tuleb kasutada mb_* funktsioone. Sellel juhul siis mb_strlen().
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
22.11.2009 13:39:22
|
|
|
Sul peab midagi serveris viga olema või ma ei tea. Alati on see kood töötanud. Vaata, mis numbrit sa siin näed. Siin on sama kood üleval, mul näitab kül 8
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
xerom
HV kasutaja
liitunud: 03.07.2002
|
22.11.2009 13:46:10
|
|
|
Jaffel on õigus, ä ka ö võtavad 2 baiti mitte 1. Ehk kasutada mb_strlen() funktsiooni ja asi laheneb. Nende väikeste koodijuppide korral kontrolli üle faili kodeering (encoding). Kui see on UTF8, siis mb_strlen jällegi aitab, kui ei ole, siis strlen() peaks hakkama saama.
|
|
Kommentaarid: 9 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
9 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
22.11.2009 14:05:42
|
|
|
Proovisin, täiesti õige, kui salvestada utf-8 siis tuleb 10, jälle targem. Aga minul ei aita siis ka see
$a = "täre tõg";
echo strlen($a);
echo "<br>".mb_strlen($a); |
mõlemad on siis 10
Kui oli Baltic windows-1257 peal nagu tavaliselt kasutan, siis mõlemad andsid 8
edit: Kasutasin siis viimast valesti. Õige oleks
echo "<br>".mb_strlen($a, 'utf-8'); |
nüüd on ok.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Absona
Lõuapoolik

liitunud: 17.09.2008
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
22.11.2009 14:28:05
|
|
|
Poole töö pealt saab ka kodeeringut muuta
mb_internal_encoding("utf-8"); |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
23.11.2009 17:43:02
|
|
|
heh, mul ütleb php et Fatal error: Call to undefined function mb_strlen() in C:\Webserver
Muidu annab ka 8 tulemuseks.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
23.11.2009 18:46:43
|
|
|
Loe teemat!
tsitaat: |
edit: Kasutasin siis viimast valesti. Õige oleks echo "<br>".mb_strlen($a, 'utf-8');
nüüd on ok. |
mb_strlen
(PHP 4 >= 4.0.6, PHP 5)
vanem php versioon?
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
23.11.2009 20:56:29
|
|
|
andrusny kirjutas: |
Loe teemat!
tsitaat: |
edit: Kasutasin siis viimast valesti. Õige oleks echo "<br>".mb_strlen($a, 'utf-8');
nüüd on ok. |
mb_strlen
(PHP 4 >= 4.0.6, PHP 5)
vanem php versioon? |
tsitaat: |
mbstring is a non-default extension. This means it is not enabled by default. You must explicitly enable the module with the configure option. See the Install section for details. |
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
24.11.2009 09:17:14
|
|
|
Mhm, mul on php 5.2.4-dev Mikk36 soovitusest ilmselt oleks abi. Samas pole ka sellise funktsiooni vajadust tundnud.
Üks väike kõrvalküsimus ka. Kuidas te koma ja punkti asja php ajate!? Mul on hetkel tavalised str_replace käsud mis koma ja punkti ära vahetavad. Andmebaasist tulevad nummerid komaga (see kala et nulli koma ees pole sain ühe pisikese oma tehtud funktsiooniga ära lahendatud), aga selleks et php arvutusi teha tuleb koma ära vahetada ning hiljem selleks et lehele kuvada jälle tagasi.
Muid ideid?
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
24.11.2009 10:50:58
|
|
|
Le Inc, setlocale - abil lokaaliks "et_ee" ehk määrata, ei tea kas too aitab, lihtsalt idee.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
xerom
HV kasutaja
liitunud: 03.07.2002
|
24.11.2009 13:44:20
|
|
|
Le Inc, kahtlane andmebaas sul, üldiselt ei tohiks numbrid andmebaasist komaga tulla, vaid siiski punktiga.. Õigem oleks see asi ära lahendada, mitte hakata str_replacega komadest punkte tegema.
|
|
Kommentaarid: 9 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
9 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
24.11.2009 14:16:14
|
|
|
Kõik on kinni locale's, Linuxi serveri peal on see kerge, kuid Wini peal ei toetata eesti localet.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
gnoom
HV veteran
liitunud: 12.12.2003
|
24.11.2009 17:09:55
|
|
|
mikk36 kirjutas: |
Kõik on kinni locale's, Linuxi serveri peal on see kerge, kuid Wini peal ei toetata eesti localet. |
Lahendus ju lihtne. Ära kasuta Winni.
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
64 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
24.11.2009 17:14:12
|
|
|
Oracle on sätitud Eesti regioonile ehk numbrid on baasis komaga. Ma locale asja proovisin aga koma ta ikka ei söö .. seega pole vahet. aa muidu Win ikka ruulib täiega! Vähemalt igav ei hakka.
Järgmine aasta ehk lendab Winodws 2008 Server R2 peale. Siis ehk läheb veelgi põnevamaks!?
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
|