Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Operacje na stringu a kodowanie
Forum PHP.pl > Forum > PHP
Altrix
Dziwna sprawa. Mam tekst w którym chce pozamieniać znaki szyfrem Cezara (czyli zamienić znak na 3 po nim w przygotowanej li¶cie znaków).

Kodowanie UTF (plik też zapisany jako UTF)
  1. <?php
  2. $tekst = "Dzisiaj żółw nie wychodził z domku!";
  3.  
  4. $alfabet = " !\"#$%&'()*+,-./0123456789:;<=>?@";
  5. $alfabet.= "Aaˇ±BbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓó";
  6. $alfabet.= "PpQqRrSs¦¶TtUuVvWwXxYyZz¬ĽŻż[\]^_`{|}~";
  7.  
  8. for ($i=0;$i<strlen($tekst);$i++) {
  9. $szyfr .= $alfabet[(strpos($alfabet, $tekst[$i])+3) % strlen($alfabet)];
  10. }
  11.  
  12. echo $szyfr;
  13. ?>

Po wykonaniu powinien wyswietlić sie tekst ale z pozamienianymi znakami (przesunięcie o 3). Niestety wy¶wietlaj± sie krzaki przy polskich fontach.

Czy kto¶ może wie czemu te operacje powoduj± zmianę kodowania?
Czy kto¶ wie jak można naprawić skrypt by prawidłowo działał?
redeemer
Zamiast strlen() użyj mb_strlen(), zamiast strpos() użyj mb_strpos()
Altrix
Niestety nadal nie działa - dalej s± krzaki

skrypt wy¶wietla
  1. eKKL#]QNY#K#Y��J���KN##����W$


a powinien
  1. eŻKTKBL#]QNY#OKF#Y¬DJPĘŻKN#Ż#ĘPŃŁW$
redeemer
Do pobierania literki ze zmiennej alfabet użyj mb_substr a nie jak teraz $alfabet[ N ]
Sinevar
Takie co¶ mi działa, zatem i Tobie powinno.

  1. <?php
  2.  
  3. mb_internal_encoding("UTF-8");
  4.  
  5. $step = 3;
  6. $text = "Dzisiaj żółw nie wychodził z domku!";
  7.  
  8. $alphabet = " !\"#$%&'()*+,-./0123456789:;<=>?@";
  9. $alphabet .= "Aaˇ±BbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓó";
  10. $alphabet .= "PpQqRrSs¦¶TtUuVvWwXxYyZz¬ĽŻż[\]^_`{|}~";
  11.  
  12.  
  13. for ($i = 0 ; $i < mb_strlen($text) ; $i++)
  14. {
  15. $szyfr .= mb_substr($alphabet, ((mb_strpos($alphabet, mb_substr($text, $i, 1)) + $step) % mb_strlen($alphabet)), 1);
  16. }
  17.  
  18. echo $szyfr;
Altrix
Dzięki Sinevar, rzeczywi¶cie działa.
To jest wersja lo-fi głównej zawarto¶ci. Aby zobaczyć pełn± wersję z większ± zawarto¶ci±, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.