Autor Zpráva
alfa47
Profil
strlen('soľ') vrati 4 znaky, asi treba pouzit mb_strlen("soľ", "utf-8"), ale preco to tak komplikuju?
pcmanik
Profil
alfa47:
Nič nekomplikujú, ide o to že funkcia strlen počitá dvojbitové znaky ako dva znaky namiesto jedného teda, všetko čo má diakritiku sú dva znaky.
alfa47
Profil
pcmanik:
a teraz v milion ztrojakoch pouzivam strlen na diakritiku, neda sa nejako pretazit povodna strlen funkcia, na tu UTF-8 funkciu?
Alebo to musim teraz vsade rucne zmenit?

Vopred dakujem velmi pekne.
Jan Tvrdík
Profil
alfa47:
neda sa nejako pretazit povodna strlen funkcia, na tu UTF-8 funkciu?
Dá, ale o takovou příšernost se prosím nepokoušej. Rozbiješ tím všechny normální PHP skripty, který předpokládají, že funkce strlen vrací počet bytů, nikoliv počet znaků.
han5vk
Profil
alfa47:
to musim teraz vsade rucne zmenit?

Chytrejšie editory by mali zvládať automatické prepisovanie. Napríklad notepad++ to má jednoducho pri vyhľadávaní, zadáš iba search : "strlen" a replace : "mb_strlen". Dá sa vybrať či prepísať jeden, práve nájdený výskyt reťazca; či to prepísať v celom dokumente; alebo vo všetkých otvorených dokumentoch.
Tori
Profil
han5vk:
zadáš iba search : "strlen" a replace : "mb_strlen".
V tomto případě je ještě nutné na začátek skriptu přidat mb_internal_encoding('UTF-8'); - výchozí kódování je totiž Latin1.
peta
Profil
alfa47: function strlen($str) {mb_strlen($str, "utf-8");}
Amunak
Profil
peta:
Fatal error: Cannot redeclare strlen() on line 1
Jan Tvrdík
Profil
peta:
Když neumíš základy PHP, tak se prosím tě radši nevyjadřuj. Díky
peta
Profil
Amunak, Jan Tvrdík: klidne muze pouzit http://cz2.php.net/override_function , proc jsi to nenapsal? Nebo http://cz2.php.net/manual/en/function.rename-function.php . Treba nejses tak chytrej, jak se snazis ze sebe delat tim, ze utocis na dalsi prispevatele.
Amunak
Profil
peta:
Proč jsi to tedy nepostnul rovnou, a poslal jsi sem blábol, který vyhodí fatal error? Navíc to, že to jde, ještě neznamená, že je to dobrý nápad. A on to taky není dobrý nápad. Navíc to vyžaduje rozšíření PHP (APD), které běžně není k dispozici a musí se doinstalovat.

Na override jde jinak použít i namespace, ale je to pěkná prasárna.
Joker
Profil
alfa47:
Bylo by dobré říct jednu věc, kterou tu zatím nikdo přímo nenapsal: Ta funkce strlen nepočítá špatně, jen dělá něco jiného než chcete. Vrací velikost řetězce v bajtech.
Proto je taky chyba natvrdo předefinovávat strlen na mb_strlen. Nebude pak správně fungovat kód očekávající, že strlen vrátí velikost řetězce v bajtech.

Jan Tvrdík:
Když neumíš základy PHP, tak se prosím tě radši nevyjadřuj. Díky
Je to marný, je to marný, je to marný.

peta:
Předpokládám, že ten postup nenapsali schválně, protože je to špatný postup.
utocis na dalsi prispevatele
Když další přispivatelé navrhnou špatný postup a ještě blbě realizovaný, nějaké to útočení si zaslouží.
alfa47
Profil
Dakujem vam pani :))) Vsetko jasne, a hlavne vdaka Tori za mb_internal_encoding('UTF-8'); Dikes!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: