Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAjax] Kodowanie znaków przy insercie
Forum PHP.pl > Forum > XML, AJAX > AJAX
yaro
Mam problem z kodowaniem znaków które są dodawane do bazy. Zamiast polskich znaków zmienia na inne, np z ą robi a. W bazie mam kodowanie iso-8859-2
W jaki sposób mam rozwiązać ten problem?
anopak
  1. <?php
  2. header('Content-type: text/html; charset=iso-8859-2');
  3. ?>


powinno pomóc...
yaro
niestety nie pomaga, teraz dodaje tylko questionmark.gif
napisałe: encodeURIComponent()
to znowu zapisuje: %C5%A1%C5%82
anopak
no to jest jeszcze opcja typu iconv bądź mb_convert_variables
yaro
Dalej mi to nie działa.
Robie tą strone społecznie i niech ktoś nie myśli że będę na tym zarabiał, chodzi mi o to że dalej są informacje o cenie itp. Robie strone dzięki której będzie można sie wymieniać danymi osób które mają książkę do sprzedania i by kupujący mógł sie z nim skontaktować.
Prosze o pomoc. Siedze już nad tym problemem drugi dzień i nie wiem jak go rozwiązać.
Podam kod:

plik: index.php
  1. <form name="doublecombo2" id="doublecombo2">
  2. <select size="1" name="a2" id="a2" onChange="java script:getKsiazki(this.options[this.selectedIndex].value, 2)">
  3. <option>-- wybierz przedmiot --</option>
  4. <?
  5. include_once "config.php";
  6. $result = mysql_query("SELECT * FROM przedmiot", $mysql_link);
  7. while ($row = mysql_fetch_assoc($result)) {
  8. echo '<option value="'.$row[id].'">'.$row[nazwa].'</option>';
  9. }
  10.  
  11. ?>
  12. </select><br /><br />
  13. <select name="tyt2" id="tyt2" size="1" >
  14. <option disabled>-- wybierz książkę(tytuł) --</option>
  15. </select><br /><br />
  16. sztuk: 1<br /><br />
  17. cena: <input type="text" name="cena" /><br /><br />
  18. opis: <textarea name="opis" rows="5" cols="30">łą</textarea><br />
  19.  
  20. <input type="button" value=" Dodaj " id="submitBtnKs" onclick="addBook()" />
  21. </form>


następnie: add.js

Kod
function addBook() {
    var opis = $("opis").value;
    
    advAJAX.post({
        url : "addBook.php",
  parameters : {
     "opis" : opis
   },
        onSuccess : function(obj) {
          if (obj.responseText == 1) {
            
             $("komunikat").innerHTML = "Twoja ksiazka zostala dodana do bazy!";
          }
          else {
        
             $("komunikat").innerHTML = "BLAD";

          }
        }
    });
}



i plik dodający: addBook.php

  1. <?php
  2. header('Content-type: text/html; charset=iso-8859-2');
  3.  
  4. include "config.php";
  5.  
  6. $opis = $_POST[opis];
  7. $activ = 1;
  8.  
  9. $user = 1;
  10. $ksiazka = 1; 
  11. $cena = 1;
  12.  
  13. //$opis = "łą";
  14.  
  15. //$opis = iconv("", "ISO-8859-2", $opis);
  16.  
  17. mysql_query("SET NAMES latin2;");
  18.  
  19. $result = mysql_query("INSERT INTO sprzedaz VALUES('', '$user', '$ksiazka', '$cena', '$opis', '$activ')");
  20. echo "1";
  21. }
  22. else
  23. echo "0";
  24. ?>


W bazie mam ustawione kodowanie latin2. Jak w pliku addBook.php ręcznie wpisze jakieś słowo z polskimi znakami to w bazie jest poprawnie zapisane, błędy powstają przy przesyłaniu do pliku addBook.php. Próbowałem to co @anopak pisał ale nic nie pomogło. Gdzie może być jeszcze jakiś błąd, nie mam już siły sad.gif
Plik index.php jest mało ważny, ale dałem. Czy ktoś ma jakiś pomysł jak to rozwiązać? Albo czy ktoś robił coś takiego i czy nie mógłby pokazać jego przykładu? Prosze o pomoc.
anopak
spróbuj tak:

  1. <?php
  2. $opis=iconv('utf-8','iso-8859-2',$opis);
  3. ?>


lub lepiej, jeżeli masz możliwość użycia mb_convert_variables:
  1. <?php
  2. mb_convert_variables('ISO-8859-2', "ASCII,UTF-8,SJIS-win", $opis);
  3. ?>


*mb_convert_variables działa na zmiennej(czyli ją zmienia odrazu) a zwraca true lub false... zreszta tak jak to pisze w manualu...


ja korzystam z mb_convert_variables i wszystko mi działa dobrze winksmiley.jpg
yaro
dalej mi nie działa sad.gif
mb_convert_variables() - jak próbuje użyć tej funkcji to parser wywala mi błąd.
Wydaje mi sie że to coś w advAjaxie jest coś nie tak, bo sprawdziłem co po kolei gdzie następuje zmiana znaków i w funkcji w której przesyłam zapytanie jest ok, ale po przjściu przez avdAjaxa wychodzą znaczki, próbowałem tych porad ale nie pomagają. AdvAjax koduje dane przez encodeURIComponent(), tylko teraz jak to zamienić na normalne znaki? Próbowałem też urldecode w php oczywiście ale nic.
@anopak czy mógłbyś mi pokazać twój przykład, bo już nie wiem co mam robić, ogłupiałem już.
anopak
przepraszam za wprowadzenie w błąd powinno być tak:

  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3.  
  4. $opis=iconv('utf-8','iso-8859-2',$opis);
  5. ?>


gdyż dane przesyłane AJAX'em zawsze są w utf-8, dlatego przy zapisywaniu do bazy danych z ajax'a należy użyć utf-8, w przypadku odczytu danych z ajax'a, używamy iso-8859-2 winksmiley.jpg
yaro
Działa smile.gif
Dzięki za wszystko @anopak
Mam nadzieje że już będzie dobrze smile.gif
xamil
Mam identyczny problem. Używam klasy advAjax. Czy nie ma możliwości ustawienia jakiś parametrów w tej klasie aby dane były jednak przesyłane na serwer w iso-8859-2 a nie UTF? Bez konieczności użycia konwersji utf-8 do iso-8859-2?

Byłoby mi to baaardzo przydatne. Z góry dzięki za pomoc.
mike
W advAJAX nie ma możliwości przesyłania w innym kodowaniu niż UTF-8
Jak to ~anakin mawia: ma być UTF-8 i tyle smile.gif
xamil
Szkoda... trochę mi to komplikuje sprawe. Niestety mam, że tak powiem narzut z góry, że muszę wrzucać do bazy treść w iso-8859-2 i nie ma innej możliwości. No cóż pozostaje mi tylko konwersja na z utf na iso:(

Dzięki!


p.s. Jest jakaś funkcja do konwersji całych tablic?biggrin.gif Chciałbym na poziomie kontrolera skonwertować całe $_REQUEST... jak nie to będę musiał użyć jakiejś funkcji rekurencyjnej.
Suzos
Dzięki za pomoc smile.gif
bim2
To mam pytanie z innej beczki. Mam formularz. Po kliknięciu wykonuje się advAjax.post.
W plikach, gdzie zapisuję dane dałem

$sText = iconv('utf-8','iso-8859-2', $sText);
i nic to nie dało (próbowałem mb_). Wysyłam także headera sciana.gif

Macie jakieś pomysły (baze mam latin_2, mysql)? Podpowiem jeszcze, że używam handyEditor, który działa w utf-8. Funkcją handyEditor.getSource(); pobieram wygenerowany kod html i wysyłam tak jak wyżej napisałem. sadsmiley02.gif

PS. Do bazy zapisują mi się "?questionmark.gif?"

EDIT: ROTFL... wczoraj 3h siedziałem i nie działało. Dodałem zapytanie SET CHASR latin2 (czy jakoś tak) i działa. Dzieki...
Rude Dude
Dobrze że natrafilem na ten temat, pomogl mi rozwiazac problem z kodowaniem. Moderatorzy powinni go przykleic.

ja u siebie zrobilem tak, w pliku php ktory wywoluje ajax mam na poczatku

  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3. ?>


i caly plik jest w kodowaniu UTF-8, zmienilem porgramem CoreEditor.

A w miejscach gdzie cos jest z bazy wyciagane to daje funkcje

  1. <?php
  2. $tytul_z_bazy =iconv('iso-8859-2','utf-8',$tytul_z_bazy);
  3. ?>


mam na odwrot kodowanie w funkcji iconv poniewaz z bazy wyciaga tekst w iso i trzeba go na utf-8 przekodowac.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.