Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] kodowanie linka
Forum PHP.pl > Forum > Przedszkole
emanuel
Plik slownik.txt zawiera słowa w kodowaniu utf-8
Słowa są wieloalfabetyczne i wielowyrazowe ze znakami diakrytycznymi alfabetów łacińskich i użyciem alfabetu rosyjskiego, arabskiego, chińskiego i japońskiego.

  1. <?php
  2. function losowe($ilelosowe,$e){
  3. $plik=file("slownik.txt"); // wczytanie pliku jako tablicy
  4. $plik=array_unique($plik); // usuniecie duplikatów tablicy
  5. $iles=count($plik); // zliczenie elementow tablicy
  6. for($i=0;$i<$ilelosowe;$i++){
  7. $los=rand(0,$iles);
  8. $slowo=urlencode(trim($plik[$los]));
  9. if($slowo!=""){
  10. if($e==1){
  11. echo"<a href='$slowo.html'>$slowo</a>, ";
  12. }
  13. }
  14. }
  15. }
  16. ?>


Chciałbym aby link
  1. echo"<a href='$slowo.html'>$slowo</a>, ";

po modyfikacji wyświetlał się tak aby na przykładzie
  1. <a href='$urlslowo.html'>$slowo</a>

zmienna $urlslowo reprezentowała wylosowaną linie tekstu zakodowana dla url
zmienna $slowo reprezentowała wylosowaną linie tekstu zakodowana w utf-8
Sama strona ma też kodowanie utf-8
Kildyt
file, count i rand.

Czyli u ciebie losową linijkę wyświetlisz przez:
  1. $plik[$los]

Czekaj, a w ogóle co ty chcesz osiągnąć? Opisz dokładniej czego nie masz i co chcesz osiągnąć.

Nie możesz po prostu rozdzielić zmienną $slowo?
thek
Jeśli zależy i na losowaniu iluś słów z pliku w formie tablicy to zamiast randi count pobaw się array_rand. Jeśli chcesz zaś wyświetlić wszystkie tyko o innej kolejności to zamiast wypisywania w pętli for i losowania tam co niechybnie doprowadzi do duplikowania słów (nie wykluczasz już raz wylosowanych!) po prostu zrób shuffle w tablicy i wyświetl wszystkie elementy. Myślę jednak, że array_rand z parametrem określającym ilość losowych elementów będzie lepsza bo dokładnie podasz ile tych elementów trzeba Ci wyciągnąć.

EDIT: Bym zapomniał... Najlepiej Twój problem rozwiązałby IMHO dobrze zastosowany mod_rewrite.
emanuel
Kildyt tak w tym kodzie
  1. $plik[$los]

to losowa linijka tablicy plik poddana usunięciu znaków pustych.
Doświadczalnie sprawdziłem że trim nie usuwa mi spacji międzywyrazowych w przypadku linijki wielowyrazowej więc do tego miejsca wydaje się być w porządku.
Teraz w serwisie gdzie to ma działać (kodowanie UTF-8) potrzebuję prawidłowego wyświetlania tekstu linku dla użytkownika i prawidłowego adresu url dla wywołania.
Próbowałem rozdzielić zmienną $slowo na $slowo i $urlslowo
  1. $slowo=trim($plik[$los]);
  2. $urlslowo=urlencode(trim($plik[$los]))

i uzyskuję nieprawidłowe wyświetlanie zmiennej $slowo plik tekstowy jest kodowany UTF-8

thek dziękuję za sugestię array_rand potrzebuję losowe, ale doskonałość jest mile widziana.
Teraz tak mi wyszło
  1. <?php
  2. function losowe($ilelosowe,$e){
  3. $plik=file("slownik.txt"); // wczytanie pliku jako tablicy
  4. $plik=array_unique($plik); // usuniecie duplikatów tablicy
  5. $losowe_klucze= array_rand ($plik,$ilelosowe); // wylosowanie kluczy elementów tablicy
  6. for($i=0;$i<$ilelosowe;$i++){ // iteracja
  7. $slowo=urlencode(trim($plik[$losowe_klucze[$i]])); // przypisanie elementu tablicy
  8. if($slowo!=""){ // sprawdzenie czy element jest różny od pustego
  9. if($e==1){ // sprawdzenie parametru ekspozycji
  10. echo"<a href='$slowo.html'>$slowo</a>, "; // wyświetlenie adresu
  11. }
  12. }
  13. }
  14. }
  15. ?>


Natomiast sugestia z mod_rewrite jest nie trafiona.
Nie na każdym serwerze na którym ma to działać będę miał do dyspozycji mod_rewrite.
Jak popatrzysz na
  1. echo"<a href='$slowo.html'>$slowo</a>, ";

zauważysz że funkcja w założeniu miała przekazywać liki już pod mod_rewrite.

Oczywiście kod pokazanej funkcji trochę obciąłem bo w zależności od wartości zmiennej $e
wyświetlany wynik jest nieco inny.
thek
Skoro nie mamy do dyspozycji mod_rewrite (a przynajmniej nie zawsze) to trzeba to będzie obejść nieco inaczej. Jedynie darmowe chyba obecnie już mod_rewrite nie dają w standardzie więc pod tym kątem akurat nie spojrzałem.
Bez niego chyba jedynym wyjściem będzie dodatkowo tworzenie plików o podanej nazwie podczas generowania strony, w której masz podany fragment kodu. Inaczej będzie Ci przy przejściu sypało 404. Innym wyjściem byłaby strona-szablon, która przyjmowała by słowa jako parametr GET lub POST (zależy jak sobie to zastosujesz). Ale wtedy stracisz linki w postaci jakiej wymagasz/oczekujesz.
emanuel
W kodzie jest
  1. $s=$_GET['s'];


Zmienna $s odpowiada za stronicowanie
a poniżej też box
  1. echo'<input name="q" class="textbox" type="text" />
  2. <input class="button" value="Найти" type="submit" />';


Na płatnych też bywa że nie ma mod_rewrite, z kolei na niektórych bezpłatnych jest, wszystko zależy od kraju i usługi.
W box udawało mi się wpisać tekst grażdanką i arabskimi byl przekazany wyswietlany bez problemu
Linki mają być dynamicznymi tagami do kolejnych podstron
thek
Linki byłyby dynamicznie na stronie, tyle że na dysku serwera powstawała by strona (lub byłby jej szablon) do której prowadziłby tag. Niestety bez mod_rewrite nie przejdzie dynamiczne tworzenie sobie nazw plików php/html i będziesz albo musiał je fizycznie utworzyć na dysku, albo przepychać nazwy jako parametr dla strony szablonu. Ja przynajmniej innej możliwości na ten moment nie widzę.
Ten drugi kod (z buttonem) można by wykorzystać w sposób, o jakim pisałem. Submit powodowałby przejście do określonej strony, gdzie wartość przycisku jest wybranym wyrazem. Problemem pewnym będzie rozpoznanie wyrazu i zapewne skończy się to złamaniem standardu, gdyż będziesz musiał wszystkim nadać to samo id, by potem ze zmiennej POST wyłuskać wartość buttona jaki kliknięto.
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.