Błąd z polskimi znakami podczas pobrania danych.

0

Witam,
Mam następujący problem. Mam skrypt jQuery, który pobiera wartość z input i wysyła ajaxem do pliku perl, który uruchamia skrypt bash z parametrem wartość z input.
Chce się pozbyć polskich znaków i niestety mi nie wychodzi.
Mam taki skrypt w bash:

#!/bin/bash
odp=$1
odp2=$(echo $odp | sed 'y/ęóąśćłżźńĘÓĄŚĆŁŻŹŃ/eoasclzznEOASCLZZN/')
echo $odp2

I jak zrobie ./skrypt.sh ąćą... to skrypt działa prawidłowo, zamienia polskie znaki.

skrypt w perlu mam mniej więcej taki:

$wart = $cgi->param('input');
$out=qx("skrypt.sh ".$wart)

I jeżeli podmieniam znaki np " na ' to wszystko działa prawidłowo, ale jak chce zamienić polskie znaki nie dostaje w ogóle danych w odpowiedzi...

dodanie znaczników <code class="bash"> i <code class="jquery"> - Furious Programming

0

Znaki definiujesz w innej stronie kodowej niż ta, w której przychodzą dane ze strony. Zapisz skrypt w tej samej stronie kodowej co strona www (vide nagłówek meta charset i/lub nagłówki serwera), albo zmień kodowanie strony tak, aby odpowiadała kodowaniu skryptu (nie polecam tej drogi, to narzędzie dostosowuje się do materiału, nie materiał do narzędzia).

0

Niestety nie pomogło nic jak do tej pory... wszystkie dokumenty mam zapisane w formacie UTF-8, w skrypcie mam fraze

print $cgi->header(-type=>'text/html',-charset=>'utf-8');

Jednak zauważyłem jedną rzecz. Jak wpisze w konsoli na swoim systemie komende locale to mam odpowiedź:

LANG=pl_PL.UTF-8
LANGUAGE=
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=

Jednak z poziomu aplikacji jak wpisze:

print exec("locale");

to dostaje wynik:

LANG= 
LANGUAGE= 
LC_CTYPE="POSIX" 
LC_NUMERIC="POSIX" 
LC_TIME="POSIX" 
LC_COLLATE="POSIX" 
LC_MONETARY="POSIX" 
LC_MESSAGES="POSIX" 
LC_PAPER="POSIX" 
LC_NAME="POSIX" 
LC_ADDRESS="POSIX" 
LC_TELEPHONE="POSIX" 
LC_MEASUREMENT="POSIX" 
LC_IDENTIFICATION="POSIX" 
LC_ALL=

Może tu tkwi problem?

dodanie znacznika <code class="jquery"> - Furious Programming

0

Raz jeszcze: problem bierze się z tego, że porównujesz znaki UTF-8 (z których część zajmuje dwa bajty i więcej) ze znakami w innej stronie kodowej, być może iso-8859-2 (nie wiem czego używa linux). Chodzi o to, co fizycznie jest zapisane w pliku ze skryptem bash. Jeśli porównujesz Ą (0xA1 iso-8859-2) z Ą (0x84 utf-8), to fizycznie nie ma możliwości, żeby matchowały. Zdefiniuj szukane znaki w skrypcie nie jako litery, a jako odpowiadające im z utf-8 numery, i wrzuć do stringa w regex tak, aby zostały zinterpretowane jako znaki, to pozbędziesz się problemu.

Obczaj http://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w.

1 użytkowników online, w tym zalogowanych: 0, gości: 1