Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Polskie znaki a jQuery
kda
post 29.06.2011, 20:50:02
Post #1





Grupa: Zarejestrowani
Postów: 75
Pomógł: 2
Dołączył: 29.07.2009

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


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.
Go to the top of the page
+Quote Post
Sephirus
post 29.06.2011, 21:05:14
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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.

Ten post edytował Sephirus 29.06.2011, 21:06:52


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kda
post 29.06.2011, 21:16:35
Post #3





Grupa: Zarejestrowani
Postów: 75
Pomógł: 2
Dołączył: 29.07.2009

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


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ę
Go to the top of the page
+Quote Post
Sephirus
post 29.06.2011, 21:23:11
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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?

Ten post edytował Sephirus 29.06.2011, 21:29:47


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
zegarek84
post 29.06.2011, 21:32:20
Post #5





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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

Ten post edytował zegarek84 29.06.2011, 21:37:32


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
kda
post 29.06.2011, 21:46:05
Post #6





Grupa: Zarejestrowani
Postów: 75
Pomógł: 2
Dołączył: 29.07.2009

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


@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

Ten post edytował kda 29.06.2011, 21:55:55
Go to the top of the page
+Quote Post
Sephirus
post 29.06.2011, 22:00:10
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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 )

Ten post edytował Sephirus 29.06.2011, 22:02:39


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
zegarek84
post 29.06.2011, 22:02:51
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
kda
post 29.06.2011, 22:20:32
Post #9





Grupa: Zarejestrowani
Postów: 75
Pomógł: 2
Dołączył: 29.07.2009

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


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
Go to the top of the page
+Quote Post
Sephirus
post 29.06.2011, 22:25:40
Post #10





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Czyli coś jest na rzeczy ;P Super i dobranoc wink.gif ja spadam


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Rid
post 29.06.2011, 22:51:06
Post #11





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


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>
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 Wersja Lo-Fi Aktualny czas: 20.05.2024 - 10:15