[JQUERY] Mozilla vs. MSIE vyhledávání s českými znaky.

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod nofire 4. 8. 2015 08:27

Zdravím,

můžete mi prosím někdo poradit. Udělal jsem pomocí ASP a Jquery vyhledávání v MSSQL databázi, kdy kontroluju zapsaný znaky v textboxu, na to reaguje script, pošle dotaz přes ASP do databáze a vrátí výsledek do DIVu s id vyhledej.
Kód: Vybrat vše
<script type="text/javascript">
  $(document).ready(function() {
   $("#jmeno").keyup(function() {
        $.get('posli.asp?q=' +  $('#jmeno').val(), function(vystup){
      $("#vyhledej").html(vystup);
      });     
   });
});     
</script>   


soubor posli.asp
Kód: Vybrat vše
<!--#include file="connstr.asp" -->
<% sql = "SELECT * FROM telseznam WHERE jmeno LIKE '%" & Request.QueryString("q") & "%' OR misto LIKE '%" & aa & "%'"

   vysledek.open sql, spojeni
Do UNTIL vysledek.EOF  %>
<tr>
<td><%= vysledek.fields("jmeno") %></td>
<td><%= vysledek.fields("misto") %></td>
<td><%= vysledek.fields("spojeni") %></td>
</tr>
       
<%   vysledek.movenext
   LOOP
   vysledek.close
%>
</table>



Všechno funguje, ale jen v Mpzille. V Microsoftím prohlížeči je problém je s českými znaky. Jakmile chci vyhledat jméno, který začíná českým zankem, nenajade to nic. Když si zobrazím sql dotaz, který se posílá do databáze, tak mozilla posílá normálně český znaky a Microsoft pošle čtvereček místo jakýhokoliv českýho znaku. Dá se tohle nějak vyřešit ?

Díky za pomoc.
Naposledy upravil nofire dne 4. 8. 2015 09:15, celkově upraveno 1
Ve víně je pravda... ale ve kterém ? Stále ho hledám.
nofire
Junior
Uživatelský avatar

Odeslat příspěvekod kostal.david8 4. 8. 2015 09:14

Máte nastavený charset UTF-8 v HTTP hlavičkách, nebo jako META charset? Prohlížeč by měl posílat odpověď ve stejném kódování jako dostal stránku.
Používáte UTF-8 i v komunikaci s DB?

Poznámka: Nijak nevalidujete vstup uživatele. Stačí aby napsal do hledání ' a kód se rozbije. To znamená velké bezpečnostní problémy
kostal.david8
Kolemjdoucí

Odeslat příspěvekod nofire 4. 8. 2015 09:21

Stránka je v UTF-8. Hlavička vypadá asi takhle:
Kód: Vybrat vše
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="scripts/jquery.min.js"></script>


Když si zobrazím sql dotaz, který se posílá do databáze, tak mozilla pošle normálně český znaky a Microsoft pošle čtvereček místo jakýhokoliv českýho znaku. Jinak bezpečnost je ošetřená. Navíc je to v podnikovým intranetu a ne v internetu. Ale to sammozřejmě je skoro stejný riziko jako v internetu. :-) .
Ve víně je pravda... ale ve kterém ? Stále ho hledám.
nofire
Junior
Uživatelský avatar

Odeslat příspěvekod kostal.david8 4. 8. 2015 09:37

Má ASP nějakou funkci na převod kódování?

-- 4. 8. 2015 10:44 --

Jaký používáte HTTP server?

Zkuste přidat kódování do HTTP hlavičky:
Response.AddHeader("Content-Type", "text/html; charset=utf-8")
Naposledy upravil kostal.david8 dne 4. 8. 2015 09:52, celkově upraveno 2
kostal.david8
Kolemjdoucí

Odeslat příspěvekod nofire 4. 8. 2015 09:49

No problém je v tom, že už na stránku asp to přijde tak, že VŠECHNY český znaky to MSIE pošle jako čtvereček, takže mi tady převod kédování nepomůže. HTTP server máme IIS 8 va windows serveru 2012 r2.
Ve víně je pravda... ale ve kterém ? Stále ho hledám.
nofire
Junior
Uživatelský avatar

Odeslat příspěvekod kostal.david8 4. 8. 2015 09:55

A slyšel jsem i že má IE problém když nemá správný doctype. Zkuste <!DOCTYPE HTML>
kostal.david8
Kolemjdoucí

Odeslat příspěvekod nofire 4. 8. 2015 10:22

tak to taky nepomohlo. Zkrátka v microsoftím prohlížeči ten script nepošle český znaky. Ještě zkusit nějakou fintu na Jquery aby to poslal on správně.
Ve víně je pravda... ale ve kterém ? Stále ho hledám.
nofire
Junior
Uživatelský avatar

Odeslat příspěvekod kostal.david8 4. 8. 2015 12:18

Zkuste ještě $.ajax místo $.get, dá se tam nastavit kódování
http://api.jquery.com/jquery.ajax/

Pomocí contentType: "application/x-www-form-urlencoded; charset=utf-8"
kostal.david8
Kolemjdoucí

Odeslat příspěvekod gandor 4. 8. 2015 14:54

Skvor by som sa sustredil na nieco taketo:
$.get('posli.asp?q=' + encodeURIComponent($('#jmeno').val()), function(vystup){
Potom na strane serveru samozrejme reverzne dekodovanie. S asp-ckom nerobim, ale na 99,999% tam nieco na to bude existovat (s urcitou nizkou pravdepodobnostou, ze to robi sam automaticky)...
gandor
Mírně pokročilý

Odeslat příspěvekod martin1397 4. 8. 2015 15:26

Skontroluj:
1) Charset databáze
2) Charset scriptov
3) Nastavený charset v <meta charset="UTF-8">
4) Ak zadávaš cez input doporučujem dať <form accept-charset="UTF-8">
martin1397
Junior

Odeslat příspěvekod nofire 4. 8. 2015 15:38

Díky, vše vyzkouším zítra až budu zase v práci. Ale posílejte prosím nápady dál. Díky
Ve víně je pravda... ale ve kterém ? Stále ho hledám.
nofire
Junior
Uživatelský avatar


Odeslat příspěvekod kostal.david8 4. 8. 2015 20:55

Kód: Vybrat vše
$.ajax({
  method: "GET",
  url: "posli.asp",
  data: { q: $('#jmeno').val() }
}).done(function(vystup) {
    $("#vyhledej").html(vystup);
});


Myslím že toto pojede, a přijde mi to jako čistčí řešení

-- 4. 8. 2015 21:57 --

martin1397 píše:4) Ak zadávaš cez input doporučujem dať <form accept-charset="UTF-8">

Tohle je nesmysl.
1. Nepoužívá form, ale AJAX,
2. tohle už v HTML5 neplatí, prohlížeč musí posílat data v tom kódování co dostal.
kostal.david8
Kolemjdoucí

Odeslat příspěvekod martin1397 5. 8. 2015 01:45

Tohle je nesmysl.
1. Nepoužívá form, ale AJAX,
2. tohle už v HTML5 neplatí, prohlížeč musí posílat data v tom kódování co dostal.


Som si vedomí toho že používa AJAX to bol len takí malý tip.

http://www.w3schools.com/tags/att_form_accept_charset.asp
Čo sa týka toho atribútu accept-charset tak tam nevidím nikde napísané že už sa nemá používať... alebo som snáď slepý? Prípadne budem rád za odkaz na oficiálnu W3C dokumentáciu kde tak bude uvedené inak.
martin1397
Junior

Odeslat příspěvekod nofire 5. 8. 2015 07:25

Díky,
řešení od Gandora funguje bez problémů. Doplnil jsem kód o URIComponent(.......) a už to píše český znaky všude.

Díky všem za spolupráci.
Ve víně je pravda... ale ve kterém ? Stále ho hledám.
nofire
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků