[ MiloshPetrovic @ 22.05.2008. 23:53 ] @
Pozdrav svima!!!

Imam sledeci problem.
Najjednostavnije, treba mi 'stvarna' duzina cirilicnog texta koji dobijam kao html entities...

Code:

<?php

// ovakav tekst dobijam
$string_1=html_entity_decode("&#1040",ENT_NOQUOTES,"UTF-8");

// html entity prema w3c
$string_2=html_entity_decode("&#1040;",ENT_NOQUOTES,"UTF-8");

// ispisuje se 6
echo strlen($string_1);
 
// ispisuje se 2
echo strlen($string_2);

?>


U oba slucaja sam, kao rezultat, ocekivao 1, a dobio sam dva razlicita rezultata (6 i 2). Da li postoji neko resenje za ovaj problem?

Unapred zahvalan,
Milosh


[Ovu poruku je menjao MiloshPetrovic dana 23.05.2008. u 01:47 GMT+1]

[Ovu poruku je menjao MiloshPetrovic dana 23.05.2008. u 01:49 GMT+1]
[ Nemanja Avramović @ 23.05.2008. 00:48 ] @
Probaj sa mb_strlen
[ MiloshPetrovic @ 23.05.2008. 01:57 ] @


Pre svega hvala na brzom odgovoru.

Pokusavao sam i sa tim 'multi byte' string funkcijama ali nece. Mislim, nisam siguran da li sam bas probao sve kombinacije, ali u osnovi kad zamenim strlen sa mb_strlen, ne dobijam zeljenji rezultat. Probao sam i razlicite encoding-e.

Bas me zeza ova 'sitnica'. Preptostavljam da si imao neku ideju, pa ako nije problem neki mali primer.
Mislim, malo me bune ti html entiteti. Gde oni spadaju, u koji encoding? Znam da su oni u osnovi numericka reprezentacija razlicitih karaktera, ali cija(UTF-8,...)? Ili su oni u osnovi svih html encoding-a... Ili su enkodinzi u njihovoj osnovi...

Svaka vrsta pomoci i komentara bi mi dobrodosla, posto mi se cini da je mali broj ljudi dosao do ovog problema, a mene ovo bas frustrira... :(
[ bzero @ 23.05.2008. 11:18 ] @
mb_strlen za $string_2 u tvom primeru je 1, koliko i treba da bude. Jesi siguran da si stavio enkoding (UTF-8) kao drugi parametar funkcije?
[ MiloshPetrovic @ 23.05.2008. 12:41 ] @
U pravu si, zaista daje 1. Zaboravio sam da stavim enkoding, sada sljaka. Hvala mnogo.

Medjutim kao sto sam napomenuo u pitanju, ja dobijam text kao html entitete bez ';', a za njih mb_strlen ne daje zeljeni rezultat. To je i razlog zasto sam prevideo slucaj sa ';'. Stvarno ne znam odakle je to generisano. Naime, postoji deo sistema koji tako generise cirilicni html i ja nemam pristup u njegov kod. Razmisljao sam da 'nabudzim' kod i da iza svakog sestog karaktera stavim ';' pa da onda primenim mb_strlen sa utf-8 enkodingom. Na mnogim mestima se istice kao jedna od greska prilikom pisanje html entiteta, izostavljanje ';'. Da problem bude malo zacinjen, ja dobijam i text koji ne mora da bude i nije samo u vidu html entiteta. Tako da mi to malo otezava ono 'budzenje'

Uz izvinjenje na nemarnosti prilikom testiranja sa mb_strlen, konacno pitanje bi bilo, da li postoji neka opcija za nestandardne entitete. Dakle za one bez ';'? Prihvatam i neku elegantniju ideju za resenje mog problema.

Da rezimiram:

Dobijam text u razlicitim oblicima. Najcesce, u sledeca dva oblika...

Code:

<?php

//standardni tekst
$string_1="problem";

//isti tekst prikazan u vidu html entiteta (bez ';')
$string_2="&#1087&#1088&#1086&#1073&#1083&#1077&#1084";
?>


Treba mi funkcija koja ce bez obzira na oblik dati pravi rezultat...

Code:

<?php
function strlen_($string){...}

//zeljeni rezultat 7
echo strlen_($string_1);

//zeljeni rezultat 7
echo strlen_($string_2);
?>


Da napomenem, ne trazim, apriori, kompletnu realizaciju, vec cisto neku ideju ili komentar na moj moguci propust u rezonovanju problema.

[ bzero @ 23.05.2008. 13:36 ] @
Pa PHP funkcije nece raditi ako entiti nema ; na kraju, jednostavno ce to tretirati kao obican string. Dodatni problem je to sto vecina browsera radi autokorekciju, pa ispravno prikazuje karakter iako nema ; na kraju.
Najbolje je naravno da ispravi deo koji generise neispravan output. Ako to nije moguce, onda mozes da koristis npr preg_replace da ispravis sve sto je oblika &# - neki broj - a ne zavrsava se sa ;
[ MiloshPetrovic @ 23.05.2008. 13:59 ] @
Pa da, tako je. Ipak da ne bih sada kombinovao sa preg_replace, sto je najbolja opcija u slucaju invalidnih html entiteta, ipak ce se promeniti 'generator' loseg html entity koda.
Cuo sam se sa deckom kod kojeg je taj 'generator' html entiteta i poslace mi kod pa cu da promenim. Problem je samo sto je vec nesto generisano sa ovim nepravilnim entitetima, ali na srecu nema toga mnogo pa ce se to ponovo izgenerisati.

U svakom slucaju hvala svima na odgovorima i na pomoci!

Pozdrav!