Autor Zpráva
tito100
Profil
zdravým všetkých.
mám problém pri posielaní diakrityki do databáze cez ajax. skúšam všetko možné a le niejak mi to nejde. na zapísanie do db používam :
function diakritika($text)
{
  return ((StrTr(($text), "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýžABCDEFGHIJKLMNOPRSTUVWXYZ", "aaccdeeeinoorstuuuyzaaccdeeeinoorstuuuyzabcdefghijklmnoprstuvexyz")));
}
function sql($sql)
{
  return mysql_escape_string(htmlspecialchars($sql));
};

$dotaz="UPDATE `zoznam` SET `name_deutsch` = '".sql(($_GET['edit']))."',`name_deutsch_alternative` = '".sql(diakritika($_GET['edit']))."', `last_modifed` = TIMESTAMP( '' ) WHERE `id` =".sql($_GET['id']);


ked volám tento script cez URL tak je všetko v poriadku.
problém nastáva, ked to volám cez xmlHttp aneb ajax. v tedy mi to dáva zakdovane znaky, v ktorých neviem zmenit diakritiku. na stránke ich však zobrazuje správne.
tu je výpis z DB po spracovaní cez url:
url pre odoslanim ?id=10&edit=šřčšřščřGERE
po odoslani ?id=10&edit=%9A%F8%E8%9A%F8%9A%E8%F8GERE
a po prejdeni funkciou diakritika srcsrscrgere
cez ajax to robý toto
pred odoslanim čěščěščhASASFAS
po odoslani do DB :čěščěščhASASFAS
je jasne že tu sa diakritika zmenit pomocou mojej funkcie neda

prosím o radu ako dostat cez ajax rovnaký výsledok ako bez neho .
tito100
Profil
pridavam este funkciu ktoru pouzivam na odoslanie :
var xmlhttp;

function initAjax()
{
  try {
    xmlhttp = new XMLHttpRequest();
  }
  catch (e) {
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) {
        alert("Váš prohlížeč nepodporuje AJAX! prosim zmente prehliadac");
        return false;
      }
    }
  }
}
initAjax();


var g_AjaxNumbOfCalling=0;
var g_AjaxLink='';
var g_AjaxFunctSucess;
var g_AjaxFunctFailed;
var g_AjaxInfoDiv;

function AjaxReques(link,functSuces,functFailed,infodiv)
{
  g_AjaxNumbOfCalling=0;
  g_AjaxLink = link;
  g_AjaxFunctSucess = functSuces;
  g_AjaxFunctFailed = functFailed;
  g_AjaxInfoDiv = infodiv;
  
  xmlhttp.open("GET", encodeURI(g_AjaxLink), true);
  xmlhttp.setRequestHeader("Content-type","text/html; charset=utf-8");
  xmlhttp.send(null);
  xmlhttp.onreadystatechange = AjaxCheckRequest;
  infodiv.innerHTML = 'AjaX : posielam poziadavku'
}

function AjaxCheckRequest()
{
  g_AjaxNumbOfCalling+=1
  if (xmlhttp.readyState == 4)
  {
    g_AjaxInfoDiv.innerHTML = 'AjaX : uspesne spracovane';
    g_AjaxFunctSucess(xmlhttp.responseText);
  }else
  {
      g_AjaxInfoDiv.innerHTML = 'AjaX : CHYBA pri spracovani';
      g_AjaxFunctFailed();
  }
}
nightfish
Profil
klasický problém
musíš zajistit, aby kódování stránky, ze které se odesílá AJAX požadavek, kódování PHP skriptu a kódování připojení k databázi byly shodné, případně pokud nebudou, tak aby na se na vhodných místech provádělo překódovávání
tito100
Profil
html kodovanie
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

mysql kodovanie mam tiež na utf-8
a ten script do ktoreho to posiela ajax, a cez ktory sa to uklada do DB je cislo len php subor. myslím že tam sa kodovanie nenastavuje.
takže v tomto problém nevydím.skúšal som aj poslat kodovaciu hlavičku cez setRequestHeader . ale ani to nepomohlo
pravdaže to všetko skúsim ešte raz :-)
nightfish
Profil
tito100:
content="text/htmll;
tady ti přebývá jedno písmeno

cez ktory sa to uklada do DB je cislo len php subor. myslím že tam sa kodovanie nenastavuje
ne, kódování se nastavuje v editoru, pomocí kterého ten soubor vytváříš
zkontroluj si, že ten PHP soubor je také v utf-8

mysql kodovanie mam tiež na utf-8
tzn. po připojení k databázi zavoláš mysql_query("SET NAMES 'utf8'")?
tito100
Profil
tak som to skontroloval. všade mam utf-8 . pridal som ešte aj hlavičku do toho php suboru. aj do ajax odosielania. stale nepomohlo. dokonca som spravil funkciu na odstranenie diakritiky cez javascriptt. a zistil ze diakritika tu nehra ziadnu rolu. ci tam je. alebo nie. stale je ta premenna poslana cez ajax cez metodu GET divne zakodovana. na stranke sa však zobrazuje spravne. ale v DB je zakodovana a tak nemožem normalne vyhladavat
[edit]
vyskúšam. zatial dakujem :-)
tito100
Profil
ja ti moc dakujem. vyriešene. problem bol v tom :
tzn. po připojení k databázi zavoláš mysql_query("SET NAMES 'utf8'")?

ešte raz dakujem

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: