Autor Zpráva
serii
Profil *
Dobrý den
mám takový problém,tady na forumu jsem našel js script který počítá kolik jsem napsal znaku
problém je,že pokud to spočítám v js,a pak následně v php,a dám to do podmínky (a následně do echa abych viděl jestli se to rovná)
tak se ukazuje (někdy jo někdy zas to jde) že php si přičítá pár znaku navíc
nevíte někdo proč?
dám příklad.
dám text:
ahoj jak se máš?
tohle je text který testuje počet znaku
v js to ukázalo 56 znaku a v php 61
jak je to možné? děkuji za odpověd či rady


v php počítám znaky následovně
strlen($retezec);
juriad
Profil
PHP nejspíš počítá byty místo znaků. Znaky ášýč se zapisují dvěma byty. (To je rozdíl 4)
Ten zbylý jeden byte může být odřádkování.

Zkus porovnat text bez hacku a carek, následně ten samý s háčky a čárkami. Dále zkus porovnat text se zalomením řádku a bez něj.

Použij funkci mb_strlen
serii
Profil *
juriad:
je to přesně tak,jak jsi řekl.
s háčkama a čárkama to bere o 2 navíc,odřádkování taky.
skusím to udělat přes ten mb_strlen


juriad:
tak to nepomohlo..teda pokud to dělám správně
mb_strlen($retezec);



tak už dobrý,dal jsem to takhle
iconv_strlen($retezec, 'UTF-8');
Tori
Profil
serii:
tak to nepomohlo..teda pokud to dělám správně
mb_strlen($retezec);
U mb_* funkcí se taky musí uvádět kódování, stejně jako jste použil u iconv_* (utf8 není výchozí).
serii
Profil *
ještě se chci zeptat,jak udělat aby to nepočítalo i ty odstavce?jelikož si to připočítává i odstavce +1


Nikdo neví?

Moderátor jenikkozak: Nekonstruktivní příspěvky sloužící pouze ke zviditelnění dotazu jsou zakázané.
Tori
Profil
serii:
Asi používáte windowsí odřádkování (\r\n) místo linuxového \n.
serii
Profil *
Tori:
mám to normální textarea...
hosting na endoře
Tori
Profil
Mě nic lepšího nenapadlo, než tohle. Možná byste měl rychlejší prostě ten text z databáze zkopírovat do text.souboru a otevřít v nějakém editoru v binárním/hexa módu - viděl byste, jestli třeba před každým zalomením řádku není navíc mezera, nebo jaká vlastně zalomení řádků tam jsou.
Jinak připadá mi logické, aby když píšu do textarea, se používaly znaky oper.systému, který používám. Tzn. že bez ohledu na to, na čem server běží - pokud návštěvník má MSIE, do textarea se budou vkládat windowsí odřádkování. (IMHO)

edit: Joker ↓: Aha, nepřečetla jsem si první příspěvek a myslela, že jde jen o PHP. Dík.
serii
Profil *
aha,a alespon v tom js to nejde nějak udělat aby to počítalo i to odřádkování když s tím v php nic nejde udělat?
znaky počítám v js takto
document.getElementById('textarea2').value.length
Joker
Profil
Tori:
To asi nebude odřádkováním, Javascript počítá \r\n taky jako dva znaky.
Ledaže by se to někde zkonvertovalo (v PHP bylo \n a do JS došlo \r\n)
serii
Profil *
Joker:
no,pokud to zkouším bez odřádkování tak to funguje,pokud skusím s odřádkováním tak php připíše o 1 znak navíc...
zjistil jsem že js to odřádkování bere jako 1znak..
takže php to odřádkování bere jako 2 znaky...
Joker
Profil
serii:
Zvláštní, když jsem to zkoušel, vrátilo mi to odřádkování jako dva znaky. Že by to bylo operačním systémem?
Dodatek, myslím v Javascriptu
serii
Profil *
Joker:
ale tak to by šlo udělat že bych to odstranil funkcí preg_replace pak a následně spočítal ne?
akorát nevím jak by měl vypadat ten kod pro odstranění odstravců...
juriad
Profil
Můžeš použít funkci http://php.net/manual/en/function.count-chars.php a zjistit, kolik obsahuje znaků s kódem 10 a s kódem 13 (to jsou dva různé znaky pro nový řádek používané na různých operačních systémech; pozor windows používají oba dva zároveň)
serii
Profil *
juriad:
nechápu jak by se to mělo napsat tímto způsobem..
nějako takhle?
$array = array('\n' , '\r' );
count_chars($retezecVtextArea , $array);
?
juriad
Profil
$retezec = "123
456
789";

$freq = count_chars($retezec, 0);
echo "počet odřádkování je: " . ($freq[10] > $freq[13] ? $freq[10] : $freq[13]) . "\n";
echo "celkem zabírají odřádkování " . ($freq[10] + $freq[13]) . " bytů\n";

Na linuxu mi to píše 2 a 2;
Na windows předpokládám napíše 2 a 4.
serii
Profil *
juriad:
Super,díky..

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:

0