Autor Zpráva
Petr Svetr
Profil
Mam nejaky ajax formular, kde texty pred odeslanim na server zaescapuju pomoci js fce escape() a na serveru bych chtel takovy string zpet odescapovat - tedy pomoci php. Nenasel jsem nic kloudneho... Prosim poradte...

Petr
Fireous
Profil
skús http://us3.php.net/manual/en/function.htmlentities.php a aj sekciu See also
Petr Svetr
Profil
Zkousel jsem psi kusy... a stale to nechodi jak ma...

Scenar:

do formulare zadam string: ěščřžýáíéúů

js po pouziti escape() vrati %u011B%u0161%u010D%u0159%u017E%FD%E1%ED%E9%FA%u016F

V php pak pro dekodovani pouziji tuto fci:
function unescape($source, $iconv_to = 'UTF-8') {
  $decodedStr = '';
  $pos = 0;
  $len = strlen ($source);
  while ($pos < $len) {
      $charAt = substr ($source, $pos, 1);
      if ($charAt == '%') {
          $pos++;
          $charAt = substr ($source, $pos, 1);
          if ($charAt == 'u') {
              // we got a unicode character
              $pos++;
              $unicodeHexVal = substr ($source, $pos, 4);
              $unicode = hexdec ($unicodeHexVal);
              $decodedStr .= code2utf($unicode);
              $pos += 4;
          }
          else {
              // we have an escaped ascii character
              $hexVal = substr ($source, $pos, 2);
              $decodedStr .= chr (hexdec ($hexVal));
              $pos += 2;
          }
      }
      else {
          $decodedStr .= $charAt;
          $pos++;
      }
  }

  if ($iconv_to != "UTF-8") {
      $decodedStr = iconv("UTF-8", $iconv_to, $decodedStr);
  }
  
  return $decodedStr;
}


a s nekterymi znaky si to poradi a s nekterymi ne - v tomto pripade vraci: ěščřž�����ů

(...a do databaze se ulozi jen ěščřž)
Petr Svetr
Profil
vyreseno... uz nikdy vice AJAX a GET dohromady
LucaS
Profil
[#4] Zdarec, a na jaké řešení jsi přišel...? Zrovna to šeřím a už hodinu googlím :-) díky
Davidh
Profil *
proste pouzij POST a neescapuj
... taky sem to resil dlouho

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:

0