Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Polskie znaki a jQuery
Forum PHP.pl > Forum > Przedszkole
kda
Witam,

Proszę pomóżcie bo już nie mam pomysłu gdzie i jak mogę zmienić sposób wyświetlania podpowiedzi podczas wpisywania tekstu w pole formularza.

początek strony:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  2. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4.  
  5.  
  6. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2" />
  7. <script type="text/javascript" src="../../javascript/jquery-1.3.2.js"></script>
  8. <script type="text/javascript" src="../../javascript/autocomplete.js"></script>
  9. <link rel="stylesheet" href="../../css/autocomplete.css" type="text/css" />
  10. <script type="text/javascript" src="lightbox.js"></script>
  11. </head>


poniżej mam formularz :

  1. <form name="formularz" METHOD="POST" action="">Szukaj pozycji:
  2. <input type="text" NAME="fraza" style="width: 300px;" value="" id="formularz" class="ac_input"/>
  3.  
  4. <script type="text/javascript">
  5.  
  6. $("#formularz").autocomplete(
  7. "wyswietl_pozycje.php",
  8. {
  9. delay:10,
  10. minChars:1,
  11. matchSubset:1,
  12. matchContains:1,
  13. cacheLength:10,
  14. autoFill:false,
  15. matchCase: false,
  16. selectFirst: false,
  17. max:10,
  18. scrollHeight: 180,
  19. mustMatch: false
  20.  
  21. }
  22. );
  23.  

Skrypt z tego formularza odwołuje się do pliku wyswietl_pozycje.php
  1. include("../../lacze.inc");
  2.  
  3. $zapytanie = "SELECT * FROM pozmagazynowe";
  4. $wynik=mysql_query($zapytanie);
  5. //$wynik = mysql_query('select user from user ');
  6. while($dane=mysql_fetch_array($wynik))
  7. {
  8. echo $dane[2].'
  9. ';
  10. }
  11. $temp_items=array();
  12. $i=0;
  13. while($qdata=mysql_fetch_array($wynik))
  14. {
  15. $temp_items[$qdata['NAZWA']].=$qdata['NAZWA'];
  16. $i++;
  17. }
  18. foreach ($temp_items as $key=>$value) {
  19. if (strpos(strtolower($key), $q) !== false) {
  20. echo "$key|$value\n";
  21. }
  22. }

Efekt jest taki:


I wszystko ładnie działa za wyjątkiem polskich znaków , dane w tabeli mam zapisane systemem kodowania charset=iso-8859-2 , gdzie robię błąd bo siedzę nad tym już drugą godzinę i zwątpiłem w swoje możliwości.
Sephirus
1. Jak wprowadzałeś dane do bazy? Poprzez jakiegoś menadżera? PhpMyAdmin? Czy skrypt z aplikacji?
2. Czy aby na pewno wszystkie pliki masz w tym kodowaniu jakie podałeś?
3. Czy ten modulik (autocomplete) nie korzysta czasem z AJAX'a do ładowania danych? Ja zawsze miałem problemy z ajaxem jeżeli używałem kodowania innego niż utf-8.
kda
ad.1
dane były wprowadzane po przez skrypt który mam oczywiście z linią w pliku
  1. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">


ad.2
temat już kiedyś przerabiałem odnośnie kodowania i wszystkie pliki opatrzone są odpowiednim wpisem
  1. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">


ad.3
modulik zassałem z jakieś stronki ,w samym pliku znalazłem fragment gdzie występuje wyrażenie AJAX oto on:

// if an AJAX url has been supplied, try loading the data now
} else if( (typeof options.url == "string") && (options.url.length > 0) ){

var extraParams = {
timestamp: +new Date()
};
$.each(options.extraParams, function(key, param) {
extraParams[key] = typeof param == "function" ? param() : param;
});

$.ajax({
// try to leverage ajaxQueue plugin to abort previous requests
mode: "abort",
// limit abortion to this input
port: "autocomplete" + input.name,
dataType: options.dataType,
url: options.url,
data: $.extend({
q: lastWord(term),
limit: options.max
}, extraParams),
success: function(data) {
var parsed = options.parse && options.parse(data) || parse(data);
cache.add(term, parsed);
success(term, parsed);
}
});
}


@Sephirus , co w związku z tym radzisz, bo zmienić system kodowania całej tabeli raczej nie wchodzi w rachubę
Sephirus
Hmmm.

Przede wszystkim nie zrozumiałeś mnie do końca z tym kodowaniem - chodzi mi o kodowanie pliku - fizyczne bo to, że masz przy wyświetlaniu strony w META ustawione iso-8859-2 nie oznacza że znaki w danym pliku autentycznie są w tym kodowaniu. Każdy najmniejszy edytorek nawet typu notepad++ czy pitpad pozwoli Ci na sprawdzenie/przekonwertowanie kodowania znaków w pliku na żądane - radziłbym sprawdzić czy wszystkie skrypty (pliki) pośredniczące w działaniu tego autocomplete (czyli sam skrypt autocomplete, skrypt php do wyszukiwania, i skrypt strony) są w tym kodowaniu jakie masz w bazie czyli iso-8859-2.

Jeżeli to nie pomoże a chcesz się upewnić czy to nie jest właśnie problem z przesyłaniem znaków z ISO-8859-2 przez AJAX to możesz stworzyć identyczną podstronę jak ta z tym polem wyszukiwania ale zakoduj ją w utf-8. zduplikuj skrypt php od wyszukiwania i wszystkie wyplute dane przekonwertuj z ISO-8859-2 na UTF-8 poprzez na przykład funkcję ICONV(...) - Jeżeli wtedy zadziała to oznacza to że trzeba szukać rozwiązania przesyłania znaków z ISO-8859-2 przez ajaxa.

Jeszcze pomyślę nad tym - to tak na szybko.

EDIT: powiem szczerze, że nigdy sam nie używałem innego kodowania niż utf-8 :/ z innymi kodowaniami miałem styczność jedynie parsując jakieś dane z innych stron, które miały inne kodowanie

EDIT2: Nie wiem czy to jakiś pomysł ale spróbuj zmienić w przeglądarce kodowanie (gdzieś w widok->kodowanie) na utf-8 wszystko powinno być wtedy w krzaczkach ale może podpowiedzi będą w dobrym kodowaniu?
zegarek84
jakikolwiek manual html'a:
<script type="text/javascript">
The default character encoding is ISO-8859-1

więc ustaw jeszcze charset

pliki php muszą też generować znaki w odpowiednim kodowaniu a i możesz dodatkowo w nagłówkach (funkcja header) ustawić odpowiedni content-type....

mozilla i dodatki takie jak firebug (zakąłdka sieć) lub live http header i sprawdź co i gdzie jest wysyłane/odbierane...
kda
@Sephirus ,z tą funkcją ICONV potestuję może coś się uda ,ale jak byś wpadł na jakiś pomysł będę niezmiernie wdzięczny, oczywiście jak mi się uda do czegoś dojść na pewno dam znać

Cytat
EDIT2: Nie wiem czy to jakiś pomysł ale spróbuj zmienić w przeglądarce kodowanie (gdzieś w widok->kodowanie) na utf-8 wszystko powinno być wtedy w krzaczkach ale może podpowiedzi będą w dobrym kodowaniu?


Nic nie pomogło nawet po wywaleniu ze strony charset=iso-8859-2
Coś czuję że chyba przekonwertowanie bazy mnie nie ominie arrowheadsmiley.png

@zegarek84 , dzięki za sugestie ale wszystkie pliki które mam w tym projekcie są opatrzone odpowiednimi wpisami co do kodowania, poradź co zrobić żeby to co już mam w tej tabeli wyświetlić w poprawny sposób ohno-smiley.gif
Sephirus
Ok ja napiszę na koniec tak smile.gif

Aby nie było krzaczków musi być spełniona - nazwijmy to - "zasada potrójnej spójności" kodowania:

1. Kodowanie bazy
2. Kodowanie skryptów PHP
3. Kodowanie strony (w przeglądarce)

Krok 3 masz na pewno załatwiony poprzez <META...> , krok 1 najprawdopodobniej też jeżeli masz tak jak piszesz bazę na ISO-8859-2.

Problem najprawdopodobniej tkwi w kroku 2.

Proponuje Ci jeszcze na szybko tak. Jak nie masz odpowiedniego programu pobierz Notepad++ otwórz w nim plik, który chcesz sprawdzić pod względem kodowania. Wybierz Format z menu na górze i zobacz czy czasem nie jest zaznaczone kodowanie utf-8 czy inne. Prawidłowo zaznaczone kodowanie powinieneś mieć w Format->Character sets->Eastern European->ISO-8859-2. Jeżeli nie jest zaznaczone to trzeba plik przekonwertować kilkając na to - przed tym jednak zrób backup wink.gif

Od razu będzie wiadomo czy to jest ok.

Mam 4 pomysły czemu może nie działać.

1. Jeżeli skrypt PHP, który wrzucał dane do bazy był w innym kodowaniu mógł coś popsuć i nawet jak skonwertujesz pliki to nadal może się źle pokazywać - trzeba to sprawdzić

2. Jeżeli strona z formularzem dodająca dane do bazy była w złym kodowaniu (czy to znaków w pliku czy w tagu META) może to zadziałać jak w pkt. 1

3. Pliki do obsługi autouploadu są w innym kodowaniu i źle interpretują dane zwrócone ze skryptu wyszukującego.

4. Naprawdę nie wiem jak to jest z przesyłaniem ISO-8859-2 przez AJAX więc ja osobiście bym jeszcze sprawdził czy to może coś chrzanić (poczytał w necie).

@zegarek84 - jak wiesz coś więcej to dopisz - co do charsetu w <script...> to chyba by aż tak nie popsuło ale też bym to za sugestią kolegi ustawił wink.gif

EDIT: hehe - może nie koniecznie Cię to czeka - trzeba zgrać wszystkie kodowania na 100% i wtedy jak to nic nie pomoże to proponuje (jeżeli się okaże że coś z kodowaniem jednak nie tak było) wrzucenie do bazy jakichś nowych polskich znaków i wyszukanie ich w formularzu - jeśli te wyświetlą się dobrze to wystarczy pokombinować z tymi które już są (trzeba by je było pobrać w ich kodowaniu, przekonwertować i wrzucić jeszcze raz - jeden mały skrypcik to załatwi o ile nie masz tam miliona rekordów ;P )
zegarek84
Cytat(kda @ 29.06.2011, 22:46:05 ) *
@zegarek84 , dzięki za sugestie ale wszystkie pliki które mam w tym projekcie są opatrzone odpowiednimi wpisami co do kodowania, poradź co zrobić żeby to co już mam w tej tabeli wyświetlić w poprawny sposób ohno-smiley.gif

daj to gdzieś na żywo
Cytat(kda @ 29.06.2011, 22:16:35 ) *
ad.1
dane były wprowadzane po przez skrypt który mam oczywiście z linią w pliku
  1. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">

może to nic nie znaczyć jeśli strona jest na darmowym hostingu i jeśli ten hosting wysłał nagłówki z innym kodowaniem (już kilka razy coś takiego widziałem) - więc najlepiej kodowanie wysyłać w nagłówkach odpowiedzi serwera header
kda
Na dzisiaj łeb mi pęka , póki co wielkie dzięki za sugestie , a nadmienie że w pliku za pomocą którego mogę edytować jakiś wiersz , zmieniłem system kodowania na utf-8 , wybrałem pierwszą lepszą linię z ogonkami , zmieniłem -> zapisałem i co biggrin.gif
po wpisaniu ładnie wyświetla tak jak powinno, jutro będę dalej kombinował wg. Waszych porad
@Sephirus ,@zegarek84 , jeszcze raz dzięki za poświęcony czas, napiszę do jakich wniosków doszedłem
Sephirus
Czyli coś jest na rzeczy ;P Super i dobranoc wink.gif ja spadam
Rid
Jakby coś nie wypaliło to można by na skrypcik spróbować wrzucić UTF-8:

<script src="src="../../javascript/jquery-1.3.2.js" type="text/javascript" charset="utf-8"></script>
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.