Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]zamiana znaków, mały problem :)
Forum PHP.pl > Forum > Przedszkole
ojs
Witam serdecznie,

mam mały problem z kodowaniem znaków... chodzi o to że na stronę wczytuję ostatnie tematy na forum wraz z linkami, problem tkwi w tym że plik generujący pobiera dane z bazy danych która ma kodowanie utf-8, a na stronie mam iso-8859-1 co powoduje wykrzaczanie liter z ogonkami sad.gif efekt można zobaczyć na www.ogar200.pl po prawej stronie.

skrypt generujący "ostatnie tematy na forum":

Kod
<?php
// USTAWIENIA

// (t) ilość wyświetlanych tematów
$default_tps_number = 10;
// (w) długość tytułów
$default_tps_title_width = 60;
// (s) miejsce, w jakim zostanie otwarty temat; topic - początek tematu, post - ostatni post
$default_tps_show = 'post';
// (p) miejsce wyświetlania tematu
$default_tps_display_place = '_blank';
// (a) pokazuje liczbe odpowiedzi; 1 - tak, 0 - nie
$default_show_answers = 1;
// (u) pokazuje autora postu; 2 - ostatniego, 1 - pierwszego, 0 - nie pokazuje autora
$default_show_posters = 2;
// (f) pokazuje nazwę forum, w którym znajduję się temat; 1 - tak, 0 - nie
$default_show_forumname = 0;

$adres_forum = 'http://forum.ogar200.pl';
// adres forum bez końcowego "/", z "http://" na początku

// KONIEC USTAWIEN

if($_GET['t']) { $t = $_GET['t']; } else { $t = $default_tps_number; }
if($_GET['w']) { $w = $_GET['w']; } else { $w = $default_tps_title_width; }
if($_GET['s']) { $s = $_GET['s']; } else { $s = $default_tps_show; }
if($_GET['p']) { $p = $_GET['p']; } else { $p = $default_tps_display_place; }
if($_GET['a']) { $a = $_GET['a']; } else { $a = $default_show_answers; }
if($_GET['u']) { $u = $_GET['u']; } else { $u = $default_show_posters; }
if($_GET['f']) { $f = $_GET['f']; } else { $f = $default_show_forumname; }

include 'config.php';

if(!$db = mysql_connect($dbhost, $dbuser, $dbpasswd)) {
echo '<b>Błąd!</b><br />Nie można połączyć się z bazą!';
}
if(!mysql_select_db($dbname, $db)) {
echo '<b>Błąd!</b><br />Nie można wybrać bazy danych!';
}

$result = mysql_query("SELECT * FROM `". $table_prefix ."topics` WHERE forum_id ORDER BY `topic_last_post_id` DESC LIMIT 0 , ". $t);

while($row = mysql_fetch_array($result))
{
   $out_title = '<a href="'. $adres_forum .'/viewtopic.php?f='. $row['forum_id'] .'&t='. $row['topic_id'] .'" target="'. $p .'">' .$row['topic_title']. '</a><br>';
   if( $f ) {
      $result_forum = mysql_query("SELECT `forum_name` FROM `". $table_prefix ."forums` WHERE `forum_id` = '". $row['forum_id'] ."'");
      $row['forum_name'] = mysql_result($result_forum, 0);
      $out_forum = '[<a href="'. $adres_forum .'/viewforum.php?f='. $row['forum_id'] .'" target="'. $p .'">'. $row['forum_name'] .'</a>] ';
   }
   if( $a ) {
      $out_answers = ' <font size=1 color="#FF9900" face="Tahoma">(<b>'. $row['topic_replies'] .'</b>) odpowiedzi</font>';
   }
   if( $u ) {
      switch($u) {
         case 2:
         $poster[0] = $row['topic_last_poster_id'];
         $poster[1] = $row['topic_last_poster_name'];
         break;

         case 1:
         $poster[0] = $row['topic_poster'];
         $poster[1] = $row['topic_first_poster_name'];
         break;
      }
      $out_poster = '<br><font size=1 color="#FF9900" face="Tahoma">ostatnia przez: <a href="'. $adres_forum .'/memberlist.php?mode=viewprofile&u='. $poster[0] .'" target="'. $p .'">'. $poster[1] .'</a></font><br>';
   }
   if(strlen($row['topic_title']) > $w) { $row['topic_title'] = substr($row['topic_title'], 0, $w); }

   $output .= $out_forum . $out_title . $out_answers . $out_poster .'<br/>';
}

echo $output;
mysql_close($db);
?>


Próbowałem z str_replace, strtr(), ale nie wiem czy do końca poprawnie sad.gif stosowałem je do zmiennej $row['forum_name']

Z góry dziękuję za odpowiedzi i pozdrawiam, Piotr (ojs)
czachor
Użyj funkcji iconv" title="Zobacz w manualu PHP" target="_manual.
ojs
Niestety tego też próbowałem... wtedy nic się nie wyświetlało sad.gif  

zastosowałem to tak:

$row['topic_title'] = iconv("UTF-8","ISO-8859-1",$row['topic_title'])

tylko nie wiem czy dobrze...

EDIT
wyświetlało się ale tylko do momentu wystąpienia polskiej litery, potem napis się urywał sad.gif

Ktoś może mi pomóc? ;(
patryczakowy
spróbuj mb_convert_encoding kiedyś miałem podobny problem i pomogła
  1. <?php
  2. $wartosc=mb_convert_encoding($wartosc,'utf-8','iso-8859-2');
  3. //zamiania iso na utf
  4. ?>
ferrero2
Przecież Ty używasz kodowania bez polskich znaków ISO-8859-1, kodowanie z polskimi znakami to ISO-8859-2
Nie wystarczy przed pobraniem z bazy wysłać któregoś z tych zapytań, zależnie od kodowania Twojej strony ?
  1. <?php
  2. mysql_query("SET NAMES 'utf8'");
  3. ?>

lub
  1. <?php
  2. mysql_query("SET NAMES 'ISO-8859-2'"); lub
  3. ?>


Pozdrawiam
ojs
Właśnie musi być ISO-8859-1, Dreamweaver domyślnie przyjął takie kodowanie i zamienia Polskie znaki na inne ciągi znaków np:
[usuń spacje]
Kod
ą =>& # 2 6 1;

ę =>& # 2 8 1;

ś =>& # 3 4 7;

ć =>& # 2 6 3;

;| nawet w między znacznikami [code] na tym forum te symbole zamieniaja sie na polskie literki...




Więc zmiana kodowania na całej stronie nie ma sensu sad.gif

ferrero2, nie mogę zmienić kodowania bazy ponieważ wtedy tematy na forum mi się wykrzaczą bo tam jest UTF-8 sad.gif

patryczakowy, zastosowałem to do zminnej $row['topic_title'] składnią:

Kod
$row['topic_title']=mb_convert_encoding($row['topic_title'],'iso-8859-2','utf-8');


nie wyświetlała wogóle polskich znaków pomijając je



Kod
$row['topic_title']=mb_convert_encoding($row['topic_title'],'utf-8','iso-8859-2');


pojawiły się inne krzaczki zamiast Polskich liter winksmiley.jpg

Myślę sobie że jedynym rozsądnym roziązaniem było by korzystanie z tablic i pobieranie polskich znaków z ogonkami i zastępować je symbolami dla iso-8859-1, niestety nie znam pełnej składni a wszystkie próby kończyły się niepowodzeniem sad.gif

Pomocy! smile.gif
patryczakowy
skoro używasz iso-8859-1 to czemu do funkcij podajesz iso-8859-2?
ojs
jak zrobiłem do iso-8859-1 było identycznie
patryczakowy
To spróbuj może coś pokombinować z kodem ASCII
ojs
Teraz sobie uświadomiłem że zamiana kodowania nic nie da sad.gif jedynie na wyjściu z bazy a ta opcja odpada... potrzebna mi jest tablica z funkcją zamieniającą polskie znaki na te które tworzą się przy kodowaniu iso-8859-1, musi wyciągać znaki z ciągu znaków i dodatkowo rozpoznawać polskie znaki... 

EDIT
tak wygląda czysty plik wygenerowany przez skrypt
http://forum.ogar200.pl/ostatnio.php
dopiero na stronie pojawiają się cyrki
patryczakowy
zawsze możesz tą stronę zaincludować w iframe smile.gif najprostsze smile.gif
ojs
Niestety jestem zrażony do iframe winksmiley.jpg i nie chcę o nim słyszeć tongue.gif

znalazłem na forum wątek gdzie ktoś podał kod z zamianą znaków w tablicach...

http://forum.php.pl/index.php?showtopic=94005

wykorzystałem kod w skrypcie i nie zamienia polskich ogonków niestety sad.gif

  1. <?php
  2. $polskie_znaki = array('ó', 'ż', 'ź', 'ł', 'ć', 'ń', 'ś', 'ę'); //Lista polskich znakow
  3.  $podmienione_znaki = array('o', 'z', 'z', 'l', 'c', 'n', 's', 'e'); // Lista podmienionych znakow
  4.  $row['topic_title'] = str_replace($polskie_znaki, $podmienione_znaki, $row['topic_title']);
  5.    $out_title = '<a href="'. $adres_forum .'/viewtopic.php?f='. $row['forum_id'] .'&t='. $row['topic_id'] .'" target="'. $p .'">' .strtolower($row['topic_title']). '</a><br>';
  6. ?>


A może w złym pliku to robię? Może powinienem to robić już przy samym includowaniu na stronie głównej?



Poradziłem sobie, z tym że nie do końca... wkleje teraz kod z tablicami, z tym że skrypt tego forum drugą tablice zamieni na polskie znaki i nie będzie różnicy dlatego powkładam spację po znaku '&'.

  1. <?php
  2. while($row = mysql_fetch_array($result))
  3. {
  4.    $polskie_znaki = array('ó', 'ż', 'ź', 'ł', 'ć', 'ń', 'ś', 'ę', 'ą'); //Lista polskich znakow
  5.    $podmienione_znaki = array('& oacute;', '& #380;', '& #378;', '& #322;', '& #263;', '& #324;', '& #347;', '& #281;', '& #261;'); // Lista podmienionych znakow
  6.    $row['topic_title'] = str_replace($polskie_znaki, $podmienione_znaki, $row['topic_title']);
  7.   $out_title = '<a href="'. $adres_forum .'/viewtopic.php?f='. $row['forum_id'] .'&t='. $row['topic_id'] .'" target="'. $p .'">' .$row['topic_title']. '</a><br>';
  8. ?>



Na tej stronie 

<a href="http://www.tony-franks.co.uk/UTF-8.htm" target="_blank">http://www.tony-franks.co.uk/UTF-8.htm</a>

są znaki które mam uzyskać... z tym że nie poprawia mi tylko ź,ś,ą

Miał ktoś z tym styczność? Proszę o pomoc! sad.gif

ROZWIĄZANE:

wystarczyło zmienić na stronie głównej kodowanie na iso-8859-2, nie wykrzaczyło stronki odziwo. Dziękuję i temat do zamknięcia winksmiley.jpg

Pozdrawiam, ojs
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.