Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z kodowaniem "-" (myśnika)
Forum PHP.pl > Forum > Przedszkole
maraska
Proszę o pomoc w takiej sprawie

Na stronie .php w UTF8 bez BOM mam formularz HTML z którego metodą Post zapisuję dane do bazy mysql w formacie Latin2_general_ci.
Jak ręcznie wprowadza się dane do formularza to wszystko jest OK.
Jednak jak się coś wklei z Worda albo zaciągnie curlem, to znak "-" myślnika, mimo że w formularzu jest myślnikiem, powoduje błąd zapisu i nic się w bazie nie zapisuje.
Np. jak myślnik jest tak zakodowany
  1. –
.

Jak osiągnąć:
1. Cel minimum - żeby nieznany znak zignorowało i do bazy zapisało
2. Cel najlepiej - jak to przekonwertować żeby zapisało się w całości

Zapewne nie tylko "-" powoduje powyższe błędy

Z góry dziękuję za pomoc
nospor
Pokaz kod jak to pobierasz z forma i jak to zapisujesz do bazy
trueblue
W latin2 nie zapiszesz znaków unicode (wielobajtowych).
Musisz przekonwertować tabelę na utf8 (wraz z zawartością).
maraska
Kod:

  1. <form id="myf" action="krok.php" method="post" accept-charset="utf-8">
  2. <input class='form' type="text" name="nazwa" value="<?php echo $title; ?>"
  3. //itd.
  4. //
  5. </form>
  6.  
  7. //Potem trochę testów, które nic nie dają :(
  8.  
  9. //$nazwa = mb_convert_encoding($nazwa, "latin2_general_ci");
  10.  
  11. //mysql_set_charset('latin2');
  12.  
  13. //$nazwa = iconv("UTF-8", "ISO-8859-1//IGNORE", $nazwa);
  14.  
  15. // i zapis
  16.  
  17. mysql_query("INSERT INTO document SET name='$nazwa' ");
  18.  
  19.  


O ile jeszcze pamiętam po setkach testów, chyba to ISO-8859-1 dawało radę z "-" (myślnikiem) ale polskie znaki w bazie były reprezentowane kodami.
Tak jak pisałem, kod działa OK. Konwersja myślników, w szczególności kodowanych w Word i takich "–" jest problemem
nospor
zamien mysql na mysqli albo na PDO i zacznij uzywac bindowania. rozszerzenie mysql nie zyje juz od lat a twoj kod teraz jest dziurawy jak sito
maraska
A jakaś porada w zakresie tematu wątku ?
nospor
No wlasnie napisalem: uzyj bindownaia smile.gif
Z tego co zrozumialem to masz blad zapytania. BINDowanie powinno rozwiazac problem. Poza tym trueblue tez dobrze napisal
maraska
Cytat(nospor @ 31.05.2022, 15:51:24 ) *
No wlasnie napisalem: uzyj bindownaia smile.gif
Z tego co zrozumialem to masz blad zapytania. BINDowanie powinno rozwiazac problem. Poza tym trueblue tez dobrze napisal


Nie mam błędu zapytania. Dwa razy pisałem że zapis działa.
Przestaje działać jak w treści jest "-".
Co tu bindowanie zmieni?
nospor
Cytat
Nie mam błędu zapytania. Dwa razy pisałem że zapis działa.
Przestaje działać jak w treści jest "-".


Zdecyduj sie:
skoro piszesz, ze przestaje dzialac jak masz myslnik, to znaczy ze nie dziala... Dobra, ja juz wymiekam, zawsze bylem kiepski z logiki

edit: dobra, post ostatniej szansy wink.gif
Wyswietl sobie blad bazy by zobaczyc o co sie pluje baza gdy nie dziala bo dales myslnik
Pyton_000
Musisz wszystko zapisywać w UTF-8 dla tego że tekst który wklejsza z Worda posiadający "myślnik" to nie jest zwykły znak minus który uważa się za myślnik dość częśto a jest to En Dash który do zakodowania potrzebuje więcej bajtów.
Ogólnie wszystko co wkleisz z Worda może być czymś innym niż to czego oczekujesz.
maraska
Cytat(Pyton_000 @ 1.06.2022, 13:12:44 ) *
Musisz wszystko zapisywać w UTF-8 dla tego że tekst który wklejsza z Worda posiadający "myślnik" to nie jest zwykły znak minus który uważa się za myślnik dość częśto a jest to En Dash który do zakodowania potrzebuje więcej bajtów.
Ogólnie wszystko co wkleisz z Worda może być czymś innym niż to czego oczekujesz.


To wiem, tylko jak mam w formularzu - accept-charset="utf-8" - to na wyjściu z formularza powinno być tylko UTF8. Racja?
I wtedy jakiś iconvert do Latin2.

Ale mi ta konwersja jakoś nie działa.
Pyton_000
Nie. Nie masz robić żadnej konwersji. Masz Form ustawić na UTF, pliki PHP zakodowane w UTF, baza w UTF. Żadnej konwersji do czegokolwiek.
trueblue
Napisałem Ci w poście #3 co trzeba zrobić.
viking
Stare, ciągle aktualne https://prophp.pl/article/3/kodowanie_znakow_na_stronach_www
maraska
Cytat(Pyton_000 @ 3.06.2022, 15:54:03 ) *
Nie. Nie masz robić żadnej konwersji. Masz Form ustawić na UTF, pliki PHP zakodowane w UTF, baza w UTF. Żadnej konwersji do czegokolwiek.

Jakby to był nowy projekt to powyższa porada jest oczywista.
Ale jak trzeba dorobić coś małego gdy z bazy korzysta już ileś tam skryptów, to zmiana kodowania bazy = szukanie wszystkiego co się do bazy odwołuje i przerabianie wszystkiego.
gino
To radze przerobić te ileś tam skryptów, zwłaszcza, że pracy przy tym raczej nie będzie dużo. Za chwilę będzie to klika -naście, - dziesiąt skryptów i problem będzie tylko narastał.
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.