[AJAX] - dziwny problem z kodowaniem

Odpowiedz Nowy wątek
2007-11-16 00:49
0

Witam,

napisałem sobie typowy skrypt autosuggest, niestety przy wybieraniu pozycji z listy podpowiedzi dostaje do inputa string z krzakami [jeśli są w nim polskie znaki].

screen:
user image

kod php:

<?php

// ładuje moduł obsługi błędów
require_once('error_handler.php');
// ładuje plik konfoguracyjny
require_once('config.php');
// klasa, której zadaniem jest obsługa funkcji podpowiadania i autouzupełniania po stronie serwera
class Suggest
{
  // obsługa bazy danych
  private $mMysqli;
  // konstruktor, otwiera połączenie z bazą
  function __construct() 
  {   
    // łączy z bazą
    $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
  }
  // destruktor, zamyka połączenie z bazą
  function __destruct() 
  {
    $this->mMysqli->close();
  }

  // zwraca nazwy wszystkich funkcji, które zaczynają się od wartości $keyword
  public function getSuggestions($keyword)
  {
    // obcina łańcuch słowa kluczowego
    $patterns = array('/\s+/', '/"+/', '/%+/');
    $replace = array('');
    $keyword = preg_replace($patterns, $replace, $keyword);
    // tworzy zapytanie SQL, które pobiera pasujące nazwy funkcji z bazy
      $this->mMysqli->query("SET NAMES 'UTF8'");
      $this->mMysqli->query('SET character_set_client=latin2');
     // $this->mMysqli->query('SET character_set_results=cp1250');

    if($keyword != '')
      $query = 'SELECT nazwa_przystanku FROM przystanki WHERE nazwa_przystanku LIKE "'.$keyword.'%"';
    // jeśli słowo kluczowe nie zostało podane, nie zwraca nic
    else
      $query = 'SELECT nazwa_przystanku ' . 'FROM przystanki ' . 'WHERE nazwa_przystanku=""'; 

    // wykonuje zapytanie SQL
    $result = $this->mMysqli->query($query);
    // tworzy odpowiedź w formacie XML
    $output = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
    $output .= '<response>';    
    // jeśli są wyniki, przegląda je w pętli i dodaje do danych wyjściowych
    if($result->num_rows)
      while ($row = $result->fetch_array(MYSQLI_ASSOC))
      {
        $nazwa = $row['nazwa_przystanku'];

        $output .= '<name>' . $nazwa . '</name>';

      }
        // zamyka strumień wyjściowy 
    $result->close();
    // dodaje znacznik kończący plik
    $output .= '</response>';   
    // zwraca wyniki
    return $output;  
  }
//koniec klasy Suggest
}
?>

i kod html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link href="suggest.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="suggest.js"></script>
  </head>
  <body>
    <noscript>
      Twoja przeglądarka nie obsługuje JavaScript!!
    </noscript>

     <div id="content" onclick="hideSuggestions();">
      <div id="message">Podaj pierwsze litery przystanku, który chcesz odnaleźć:</div>
      <input type="text" name="keyword" id="keyword" maxlength="70" 
             size="69" onkeyup = "handleKeyUp(event)" value="" />
      <div id="scroll">
        <div id="suggest">
        </div>
      </div>
    </div> 

  </body>
</html>

dodam że w bazie mam kodowanie UTF-8.

Jakieś pomysły?
Z góry dziękuję

Pozostało 580 znaków

2007-11-16 10:04
prohol
0

A jak wygenerujesz xml prosto z klasy(bez formularza, z palca) z jakims slowem kluczowym to sa polskie znaki w tym xml?

Pozostało 580 znaków

2007-11-16 17:14
0

Tak,

lista jak widać ma polskie znaki jednak po wybraniu pozycji i przepisaniu jej do inputa polskie znaki sa juz zakrzaczone :/

Pozostało 580 znaków

2007-11-16 18:29
0

A plik xml też jest kodowany UTF-8? I czy w nagłówku umieściłeś info o tym?

Pozostało 580 znaków

2007-11-16 21:10
0

Tak,

    $output = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';

a teraz dodam jedną ciekawostkę - w IE i Operze działa bez problemu, krzaki sa tylko w FF

komuś to coś mówi?

Pozostało 580 znaków

2007-11-17 13:09
0

To jeszcze jedna rzecz - jak serwer wysyła plik? Też jako zakodowany utf-8 czy może w nagłówku Content-Type jest jakieś inne kodowanie ustalone?

Pozostało 580 znaków

2007-11-17 19:00
0
header('Content-Type: text/xml; charset=UTF-8');

Pozostało 580 znaków

2007-11-17 19:41
fsdfsd
0

ale nie dokumentu xml tylko strony na której to sie dzieje

Pozostało 580 znaków

2007-11-17 20:21
0

kod strony na ktorej to sie dzieje jest w pierwszym poście,
interesujący Cię fragment:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Pozostało 580 znaków

2007-11-17 21:13
ggfgfgf
0

to nie jest interesujący nas fragment

Pozostało 580 znaków

2007-11-18 11:51
0

Chodzi o to czy pliki są kodowane utf-8 a nie czy meta jest ustawiona na utf-8. Bo sama meta przecież nie zmieni kodowania pliku.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0