Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]zamiana znaków, mały problem :)
ojs
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.04.2008

Ostrzeżenie: (0%)
-----


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)

Ten post edytował ojs 19.06.2009, 20:33:06
Go to the top of the page
+Quote Post
czachor
post
Post #2





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Użyj funkcji iconv" title="Zobacz w manualu PHP" target="_manual.


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
ojs
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.04.2008

Ostrzeżenie: (0%)
-----


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? ;(

Ten post edytował ojs 19.06.2009, 20:40:01
Go to the top of the page
+Quote Post
patryczakowy
post
Post #4





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował patryczakowy 20.06.2009, 08:23:34


--------------------
Sztuką jest widzieć to czego nie widać.
Go to the top of the page
+Quote Post
ferrero2
post
Post #5





Grupa: Zarejestrowani
Postów: 171
Pomógł: 32
Dołączył: 5.08.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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


--------------------
---------------------------
"Jeżeli trzeci dzień z rzędu nie chce Ci się pracować tzn że dziś jest ŚRODA !
Algorytmy , Programowanie , Tworzenie WWW - SPRAWDŹ
Go to the top of the page
+Quote Post
ojs
post
Post #6





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.04.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował ojs 20.06.2009, 08:41:19
Go to the top of the page
+Quote Post
patryczakowy
post
Post #7





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


skoro używasz iso-8859-1 to czemu do funkcij podajesz iso-8859-2?


--------------------
Sztuką jest widzieć to czego nie widać.
Go to the top of the page
+Quote Post
ojs
post
Post #8





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.04.2008

Ostrzeżenie: (0%)
-----


jak zrobiłem do iso-8859-1 było identycznie
Go to the top of the page
+Quote Post
patryczakowy
post
Post #9





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


To spróbuj może coś pokombinować z kodem ASCII


--------------------
Sztuką jest widzieć to czego nie widać.
Go to the top of the page
+Quote Post
ojs
post
Post #10





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.04.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował ojs 20.06.2009, 08:51:18
Go to the top of the page
+Quote Post
patryczakowy
post
Post #11





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

Ostrzeżenie: (0%)
-----


zawsze możesz tą stronę zaincludować w iframe smile.gif najprostsze smile.gif


--------------------
Sztuką jest widzieć to czego nie widać.
Go to the top of the page
+Quote Post
ojs
post
Post #12





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.04.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował ojs 20.06.2009, 15:36:21
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 23:23