Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kodowanie strony i tworzenie poprawnych linków
Forum PHP.pl > Forum > Przedszkole
dopal
Witam,

Generalnie swoje strony zawsze koduję w UTF-8.
W obecnym przypadku musiałem zmienić kodowanie na windows-1250, a wynika to z faktu pobierania danych
z serwera IBM AS/400 ( generalnie to nie ma znaczenia i nie wypływa na problem ).
Mam taki oto kod:

  1. <?php
  2. require_once('class/class.SQL.php');
  3.  
  4. $sql = new SQL;
  5. $sql->connection();
  6. ?>
  7. <html>
  8. <head>
  9. <title>Test zestawienia</title>
  10. <meta http-equiv="Content-type" content="text/html; charset=windows-1250" />
  11. </head>
  12. <body>
  13.  
  14. <?php
  15. //start szukania
  16.  
  17. $_POST['osoba']=trim($_POST['osoba']);
  18. $_POST['haslo']=trim($_POST['haslo']);
  19.  
  20. ?>
  21.  
  22. <?php
  23. $user = $_POST['osoba'];
  24. $pass = $_POST['haslo'];
  25. $connect = odbc_connect("bank", $user, $pass);
  26. if ( !$connect ) {
  27.  
  28. $info = 'NIEPRAWIDŁOWY LOGIN LUB HASŁO .';
  29. $_SESSION['info'] = $info;
  30. $color1='red';
  31. $_SESSION['color1'] = $color1;
  32. $komentarz = '<font color="'.$_SESSION['color1'].'" size="3"><b>'.$_SESSION['info'].'</b></font>';
  33. $_SESSION['komentarz'] = $komentarz;
  34. header('location: zest6_szukaj.php');
  35. }
  36. elseif ( $connect) {
  37.  
  38. ?>
  39. <table width="55%" border="1" align="center">
  40. <tr><td width="25%" align="center"><b> Centrum</td><td width="50%" align="center" colspan="3"><b><h1>ZESTAWIENIE<br>wg zamieszkania</h1></b></td><td width="25%" align="center"><b>Data zestawienia:</b> <br><?php echo date('Y-m-d ');?><br><?php echo date('H:i:s');?></td></tr>
  41. <tr><td width="25%" align="center">Katowice<br>ul. Testowa 3<br>00-000 Kraków</td><td width="50%" align="center" colspan="3"><img src="../images/logo.jpg" width="300" height="60" /></td><td width="25%" align="center"><b>Kto wykonał: </b><br> <?php echo $user; ?></td></tr>
  42. </table>
  43. <br>
  44.  
  45. <table width="55%" border="1" align="center">
  46. <tr bgcolor="#00A1FF"><td width="50%" align="center" colspan="4"><b>Raport w liczbach</b></td></tr>
  47. <tr bgcolor="yellow">
  48. <td width="5%" align="center"><b>Lp.</b></td><td width="30%" align="center"><b>Miejsce zamieszkania</b></td><td width="10%" align="center"><b>Ilość </b></td><td width="10%" align="center">&nbsp;</td></tr>
  49.  
  50.  
  51. <?php
  52. $pytanie4="SELECT DADWA1, COUNT(*) as ilosc2 FROM DAWCY GROUP BY DADWA1 ORDER BY ilosc2 DESC, DADWA1 ASC";
  53.  
  54. $result4 = odbc_exec($connect, $pytanie4) or die( odbc_error());
  55.  
  56. $x=0;
  57. while(odbc_fetch_row($result4))
  58.  
  59. {
  60. $x++;
  61. $odp3 = odbc_result($result4, 1);
  62. $odp4 = odbc_result($result4, 2);
  63.  
  64. {
  65. $suma1 +=$odp4;


Problem dotyczy sytuacji poniżęj.
Wyniki otrzymuję prawidłowo, z poprawnym kodowaniem. W pierwszej kolumnie otrzymuję kolejny numer.
W drugiej nazwy miast polskich np. Warszawa, Kraków, Lublin, Gdańsk.
W trzeciej wartości liczbowe ( ilość rekordów gdzie wystepuje dana nazwa miasta )
W ostatniej kolumnie mam Szczegóły, gdzie tworzony jest link dodanych rekorów z danego miasta.
Czyli powstaje np link zest6_wyn.php?more2=Warszawa, gdy w niego kliknę otrzymuję adres jaki jest wcześniej.
Problem jest,gdy w nazwach miast wystepują polskie znaki np. Kraków
Gdy najeżdżam myszką na Szczegóły to podśwtetla mi się prawidłowy link
zest6_wyn.php?more2=Kraków
Natomiast gdy, w niego klinkę,otwiera mi się nowa strona z takim adresem
zest6_wyn.php?more2=Krak%F3w

Chciałbym by otwierany link zawierał polskie znaki, gdyż na tej nowej stronie,
w dalszej części kodu wyciągam nazwę miasta z linka, przypisuję do zmiennej i na tej podstawie
tworzę zapytanie do bazy, dlatego muszę otrzymać w linku polskie znaki.
  1. echo '<tr>
  2. <td align="center" width="5%">'.$x.'</td>
  3. <td width="30%" align="center">'.$odp3.'</td>
  4. <td width="10%" align="center""><b>'.$odp4.'</b></td>
  5. <td width="10%" align="center">&nbsp;<a href="zest6_wyn.php?more2='.$odp3.' " target=_blank>Szczegóły</a></td>
  6. </tr>';
  7. }}
  8. ?>
  9. </table>
  10. <?php
  11. }
  12. odbc_close($connect);
  13. ?>
  14. </body></html>


Jak to można zrobić?
Sephirus
Witaj,

To musi mieć na bank związek z kodowaniem, którego używasz. Nie wiem jak windows 1250 wygląda w adresie i czy czasem nie jest tak, że nie jest wyświetlane jako utf-8.

Rozwiązań jest wiele.

1. Możesz spróbować w href podać nazwę miasta skonwertowaną do utf-8 (iconv w PHP) a potem otrzymując tablicę GET przed użyciem tej zmiennej znów skonwertować ją do windows 1250.

2. Możesz posłużyć się wersją nazwy pozbawioną polskich liter, lecz wówczas musiała ona by być zapisana w bazie obok oryginalnej nazwy by można było ją rozpoznać

3. Możesz w adres wrzucać ID miasta a nie nazwę

wink.gif
dopal
Domyślam się, że ma to związek z tym kodowaniem.
Baza nie jest moja, nie mogę w nią ingerować, jedynie pobierać dane, dlatego podpowiedź 2 od razu odpada.
Podpowiedź 3 również, gdyż nie ma tabeli zawierającej wszystkie miasta, miasta nie mająswojego ID, są jedynie w pisywane
w polu przy danym rekordzie.

A jak ten punkt 1 zrobić,możesz go rozwinąć?

Robię tak:
  1. $odp3a=iconv(mb_detect_encoding($odp3),"utf-8",$odp3);
  2. echo '<tr>
  3. <td align="center" width="5%">'.$x.'</td>
  4. <td width="30%" align="center">'.$odp3.'</td>
  5. <td width="10%" align="center""><b>'.$odp4.'</b></td>
  6. <td width="10%" align="center">&nbsp;<a href="zest6_wyn.php?more2='.$odp3a.' " target=_blank>Szczegóły</a></td>
  7. </tr>';
  8. }}

Otrzymuję:
zest6_wyn.php?more2=Krak
tak to skraca,pozostałe miasta z polskimi znakami również.

Ok problem rozwiązałem.
W nowo otworzonej stronie ( tej z linkiem np. zest6_wyn.php?more2=Krak%F3w )
wykorzystałem informacje znalezione poniżej i działa tak jak chciałem.
http://pl.php.net/rawurldecode
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.