Diskuze: Kódování a PHP script
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
pravděpodobně kódování zdrojového kódu není UTF8. lepší IDE a editory to umí opravit.
No to jsem myslím taky hledala a Notepad++ i PSPAD ukazují UTF-8
jinak takto vypadají výstupy
Zkus to v PSPadu uložit znovu po zvolení formátu. Zvolíš formát, klikneš na UTF-8 a uložíš. Mě to takhle občas bugovalo, ve skutečnosti to kódování bylo jiné i když to ukazovalo UTF-8, asi nějaká chybka.
Nemusi to byt problem s UTF-8. Vies nam dat viac informacii? Napriklad zdroj html kodu, ktory ti to vygenerovalo, nieco ako co som prilozil.
Z tvojho obrazku vidiet ze prvych sedem znakov ani nie je v <spane> pretoze nemaju nastavenu velkost fontu a farbu.
Takisto vies nam poslat co je v $this->text ? Skus pridat var_dump pred while cyklus.
$textlength = strlen($this->text);
var_dump($this->text);
while ($i < $textlength) {
Máš pravdu, není to v tom
$ret = '';
$this->vypocetGradientu();
// čítač
$i=0;
$textlength = strlen($this->text);
var_dump($this->text);
while($i<$textlength)
{
foreach($this->GradientColors as $value)
{
if ($this->text[$i] != "")
{
$ret .= '<span style="font-size:43px; color:#'.$value.';">'.$this->text."</span>";
}
$i++;
}
}
echo ($ret);
$ret .= '<span style="font-size:43px;
color:#'.$value.';">'.$this->text."</span>";
-> Když jsem nechala přidat pouze $this->text bez toho indexu [$i]
vypisuje se to správně (akorát teda protože je to v cyklu, tak víckrát -
celej text)
Podle mě to bude tím, že ty háčko-čárkové znaky zabírají 2
místa... ? A pak je bordel u toho indexu? No nevím..
Tady dávám obrázek co to udělá s var_dump.. a s kódem výše. (je tam
vidět, že č zabírá 2 místa a s 1)
Jinak to html nevím co přesně myslíš
Každopádně alespoň už vím, že to není kódováním
Pokud používáš UTF-8 jako kódování, tak nepoužívej funkci strlen, ale mb_strlen, protože české znaky v unicode zabírají 2 byty a ne jeden, proto ti dole ten var_dump ukazuje, že délka řetězce jsou 3, i kdžy to má ukazovat 2. Pokud chceš v tom tvem algoritmu změřit délku textu( počet znaků) a ne počet bytů, tak použij funkci mb_strlen, jak už jsem psal nahoře.
Kodovanie mas spravne ale
predsa je problem so spracovanim UTF-8 znakov.
Text "čs" ma 2 znaky ale zabera 3 bity. https://mothereff.in/byte-counter#…
Ak pozrieme http://php.net/strlen tak tam najdeme
Note:
strlen() returns the number of bytes rather than the number of characters in a string.
Tvoj cyklus ide preto tri razy. Ak chces naozaj pocitat znaky, tak v tvojom pripade by som pouzil
$textlength = iconv_strlen($this->text, mb_detect_encoding($this->text));
K bodu dva: tvoje $this->text[$i] by ti malo vratit jeden znak z tvojo
textu. Ale kedze "č" zabera
dva znaky tak ti to takto nebude fungovat. Musis pouzit byte safe funkciu vo
vnutri tvojho foreach loopu (http://php.net/…b-substr.php) Asi takto:
if (mb_substr($this->text(), $i, 1, mb_detect_encoding($this->text)) != "")
{
$ret .= '<span style="font-size:43px; color:#'.$value.';">'.mb_substr($this->text(), $i, 1, mb_detect_encoding($this->text))."</span>";
}
Moc děkuji! Tohle
funguje jak má!
btw: děkuji všem za odpovědi
Vyřešeno
zabera 3 bity jsi asi chtěl napsqat jako zabera 3 bYty
bit a byte je rozdíl.
1 byte = 8 bitů.
Spravne, to som chcel napsQat. Chybicka se vloudila
Zobrazeno 13 zpráv z 13.