Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zamiana liter w wyrazach
Forum PHP.pl > Forum > Przedszkole
bronx
witam!

mam taki problem...

musze pod php napisać skrypcik o nazwqie "szyfrowanie AtBash". Czyli w danym tekście (np 4-5 zdań) zamienia w każdym wyrazie literke na przeciwległą w alfabecie... czyli zamiast A wstawi Z, zamiast B wstawi Y itd...

wie ktos jak to zrobić ?

najlepiej by było gdyby skrypt rozróżniał też małe i duże liter (czyli za małą wstawi małą a za dużą dużą)

z góry dziękuje za pomoc...
phpion
Co Ci będzie potrzebne:
1. tablica:
  1. <?php
  2. $array = array('a' => 'z', 'b' => 'y'); // itd
  3. ?>

lub odpowiednie obliczenia na kodach znaków.
2. pętla for śmigająca tekst znak po znaku
3. Odwołanie do tablicy poprzez $array[$znak].

Powodzenia, nie jest to trudne zadanie.
bronx
ja myślałem, żeby to zrobić jakoś na liczbach... alfabet ma 26 liter... ale w sumie Twoje roziwązanie też może być...

może nie jest to trudne, ale ja nie moge sobie z tym poradzić :/ Nie wiem jak lecieć tekst znak po znaku :/ i jak potem zamienić znaki :/

zrobiłem takie coś... co dalej ?

  1. <?php
  2. $array = array('a' => 'z', 'b' => 'y', 'c' => 'x', 'd' => 'w', 'e' => 'v', 'f' => 'u', 'g' => 't', 'h' => 's', 'i' => 'r', 'j' => 'q', 'k' => 'p', 'l' => 'o', 'p' => 'k', 'q' => 'j', 'r' => 'i', 's' => 'j', 't' => 'g', 'u' => 'f', 'v' => 'e', 'w' => 'd', 'x' => 'c', 'y' => 'b', 'z' => 'a',);
  3.  
  4. $tekst = "ala ma sobie rudego kocurka";
  5.  
  6. ?>
1010
  1. <?
  2.  
  3. $tekst = "to jest jakiś twój tekst";
  4.  
  5. $array = array('a' => 'z', 'b' => 'y', 'c' => 'x', 'd' => 'w', 'e' => 'v', 'f' => 'u', 'g' => 't', 'h' => 's', 'i' => 'r', 'j' => 'q', 'k' => 'p', 'l' => 'o', 'p' => 'k', 'q' => 'j', 'r' => 'i', 's' => 'j', 't' => 'g', 'u' => 'f', 'v' => 'e', 'w' => 'd', 'x' => 'c', 'y' => 'b', 'z' => 'a', ' ' => ' ');
  6.  
  7. $ile_znakow = strlen($tekst);
  8.  
  9. for($i=0; $i<$ile_znakow; $i++)
  10. {
  11.  $tekst[$i] = $array[$tekst[$i]];
  12. }
  13.  
  14. print $tekst;
  15.  
  16. ?>


pisane z palca, ale powinno działać...

Pozdro
webdice
  1. <?php
  2.  
  3. $array1 = array ('a', 'b');
  4. $array2 = array ('z', 'y');
  5.  
  6. $string = "ala ma sobie rudego kocurka";
  7.  
  8. print str_replace ($array1, $array2, $string);
  9.  
  10. ?>
bronx
oba działają - wielkie dzięki smile.gif

no dobra, a jak w tym drugim przykładzie zrobić żeby działałą też na duże i małe litery ? przepuścić string najpierw przez jedno str_replace a potem przez drugie ? (z tablicami z dużymi literami) ?
1010
Rozbuduj dwie tablice
  1. <?
  2. $array1 = array ('a', 'b', ... 'A', 'B');
  3. $array2 = array ('z', 'y', ... 'Z', 'Y');
  4. ?>
webdice
  1. <?php
  2.  
  3. $array1 = array ('a', 'A', 'b', 'B');
  4. $array2 = array ('z', 'Z', 'y', 'Y');
  5.  
  6. $string = "ala ma sobie rudego kocurka AAA";
  7.  
  8. print str_replace ($array1, $array2, $string);
  9.  
  10. ?>
bronx
niestety, ale ten kod jednak nie działa

  1. <?php
  2.  
  3. $array1 = array ('a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z');
  4.  
  5. $array2 = array ('z', 'Z', 'y', 'Y', 'x', 'X', 'w', 'W', 'v', 'V', 'u', 'U', 't', 'T', 's', 'S', 'r', 'R', 'q', 'Q', 'p', 'P', 'o', 'O', 'n', 'N', 'm', 'M', 'l', 'L', 'k', 'K', 'j', 'J', 'i', 'I', 'h', 'H', 'g', 'G', 'f', 'F', 'e', 'E', 'd', 'D', 'c', 'C', 'b', 'B', 'a', 'A');
  6.  
  7. $string = "a b c d e f g h i j k l m n o p q r s t u w x y z";
  8.  
  9. echo "$string<br />";
  10.  
  11. print str_replace ($array1, $array2, $string);
  12.  
  13. ?>


ponieważ pokazuje takie ciągi:

Kod
a b c d e f g h i j k l m n o p q r s t u w x y z
a b c d e f g h i j k l m m l k j i h g f d c b a


na górze oryginalny a na górze po zamianie i jak widać coś nie trybi :|
webdice
Spróbuj rozbić sobie to na 4 tablice (2 z małymi literami oraz 2 z dużymi literami) i zastosuj 2 razy funkcje str_replace" title="Zobacz w manualu PHP" target="_manual. Powinno zadziałać.
bronx
niestety nie w tym jest problem... nawet gdy mam tylko z małymi literami efekt jest taki sam... dopiero po połowie zamienia...
Kicok
Przy pomocy str_replace" title="Zobacz w manualu PHP" target="_manual ciężko to będzie zrobić, bo funkcja ta idzie sekwencyjnie po elementach tablicy i najpierw zamieni wszystkie litery "a" na "z", a pod koniec wszystkie litery "z" (łącznie z już zamienionymi literami "a") zamieni na a


Trzeba będzie przejechać pętlą po tekście, sprawdzać kod ASCII każdego znaku i jeśli znak ten będzie literą z pierwszej połowy alfabetu, to dodać do kodu ASCII 13 i zamienić z powrotem na literę (analogicznie jeśli litera będzie z drugiej połowy alfabetu to odejmujemy 13)
http://asciitable.com/
ord" title="Zobacz w manualu PHP" target="_manual
chr" title="Zobacz w manualu PHP" target="_manual



PS. A teraz spoiler:
str_rot13" title="Zobacz w manualu PHP" target="_manual tongue.gif
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.