Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  PHP: strlen() annab ä ö puhul vale stringi pikkuse märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
pmz
HV vaatleja

liitunud: 05.07.2008




sõnum 22.11.2009 12:56:24 PHP: strlen() annab ä ö puhul vale stringi pikkuse vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 22.11.2009 13:07:36 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
pmz
HV vaatleja

liitunud: 05.07.2008




sõnum 22.11.2009 13:09:41 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
Jaffe
HV vaatleja

liitunud: 15.11.2004




sõnum 22.11.2009 13:20:51 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 22.11.2009 13:39:22 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
xerom
HV kasutaja

liitunud: 03.07.2002



Autoriseeritud ID-kaardiga

sõnum 22.11.2009 13:46:10 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 22.11.2009 14:05:42 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Absona
Lõuapoolik
Lõuapoolik

liitunud: 17.09.2008




sõnum 22.11.2009 14:10:30 vasta tsitaadiga

PHP'l peab veel eraldi määratlema kodeeringut icon_eek.gif kui tahan stringi pikkuse teada saada tähtedena icon_rolleyes.gif Sellist asja võiksid küll PHP loojad muuta.
_________________
Veebilehed, veebiprogrammeerimine, veebilahendused
Erinevad rakendused ja skriptid.
Kommentaarid: 11 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 22.11.2009 14:28:05 vasta tsitaadiga

Poole töö pealt saab ka kodeeringut muuta

mb_internal_encoding("utf-8");

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Le Inc
HV Guru
Le Inc

liitunud: 06.09.2002



Autoriseeritud ID-kaardiga

sõnum 23.11.2009 17:43:02 vasta tsitaadiga

heh, mul ütleb php et Fatal error: Call to undefined function mb_strlen() in C:\Webserver

Muidu annab ka 8 tulemuseks. icon_smile.gif
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 23.11.2009 18:46:43 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 23.11.2009 20:56:29 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
Le Inc
HV Guru
Le Inc

liitunud: 06.09.2002



Autoriseeritud ID-kaardiga

sõnum 24.11.2009 09:17:14 vasta tsitaadiga

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. icon_smile.gif

Muid ideid?
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
raido357
HV veteran

liitunud: 26.09.2002




sõnum 24.11.2009 10:50:58 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
xerom
HV kasutaja

liitunud: 03.07.2002



Autoriseeritud ID-kaardiga

sõnum 24.11.2009 13:44:20 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 24.11.2009 14:16:14 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
gnoom
HV veteran

liitunud: 12.12.2003




sõnum 24.11.2009 17:09:55 vasta tsitaadiga

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. icon_smile.gif
Kommentaarid: 67 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 64
tagasi üles
vaata kasutaja infot saada privaatsõnum
Le Inc
HV Guru
Le Inc

liitunud: 06.09.2002



Autoriseeritud ID-kaardiga

sõnum 24.11.2009 17:14:12 vasta tsitaadiga

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. icon_smile.gif

Järgmine aasta ehk lendab Winodws 2008 Server R2 peale. Siis ehk läheb veelgi põnevamaks!? icon_biggrin.gif
Kommentaarid: 56 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  PHP: strlen() annab ä ö puhul vale stringi pikkuse
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.