Autor | Zpráva | ||
---|---|---|---|
serii Profil * |
#1 · Zasláno: 5. 7. 2013, 13:48:20 · Upravil/a: serii
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 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 * |
#3 · Zasláno: 5. 7. 2013, 13:58:54 · Upravil/a: serii
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 |
#4 · Zasláno: 5. 7. 2013, 14:30:07
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 |
#6 · Zasláno: 5. 7. 2013, 17:27:27
serii:
Asi používáte windowsí odřádkování ( \r\n ) místo linuxového \n .
|
||
serii Profil * |
#7 · Zasláno: 5. 7. 2013, 17:45:25
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 * |
#9 · Zasláno: 6. 7. 2013, 10:33:42
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 |
#10 · Zasláno: 6. 7. 2013, 10:51:20
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 * |
#11 · Zasláno: 6. 7. 2013, 12:06:46
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 * |
#13 · Zasláno: 6. 7. 2013, 13:51:19
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 |
#14 · Zasláno: 6. 7. 2013, 13:56:44
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 * |
#15 · Zasláno: 6. 7. 2013, 15:05:00
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 |
#16 · Zasláno: 6. 7. 2013, 15:18:14
$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 * |
#17 · Zasláno: 6. 7. 2013, 20:07:19
juriad:
Super,díky.. |
||
Časová prodleva: 11 let
|
0