Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z kodowaniem "-" (myśnika)
maraska
post 31.05.2022, 12:58:06
Post #1





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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

Ten post edytował maraska 31.05.2022, 12:59:28
Go to the top of the page
+Quote Post
nospor
post 31.05.2022, 13:29:39
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Pokaz kod jak to pobierasz z forma i jak to zapisujesz do bazy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 31.05.2022, 13:49:54
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


W latin2 nie zapiszesz znaków unicode (wielobajtowych).
Musisz przekonwertować tabelę na utf8 (wraz z zawartością).


--------------------
Go to the top of the page
+Quote Post
maraska
post 31.05.2022, 14:30:39
Post #4





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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

Ten post edytował maraska 31.05.2022, 14:33:02
Go to the top of the page
+Quote Post
nospor
post 31.05.2022, 14:34:54
Post #5





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
maraska
post 31.05.2022, 14:43:37
Post #6





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


A jakaś porada w zakresie tematu wątku ?
Go to the top of the page
+Quote Post
nospor
post 31.05.2022, 14:51:24
Post #7





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
maraska
post 31.05.2022, 15:06:17
Post #8





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post 31.05.2022, 15:33:40
Post #9





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 1.06.2022, 12:12:44
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
maraska
post 3.06.2022, 14:35:23
Post #11





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Pyton_000
post 3.06.2022, 14:54:03
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nie. Nie masz robić żadnej konwersji. Masz Form ustawić na UTF, pliki PHP zakodowane w UTF, baza w UTF. Żadnej konwersji do czegokolwiek.
Go to the top of the page
+Quote Post
trueblue
post 3.06.2022, 14:58:57
Post #13





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Napisałem Ci w poście #3 co trzeba zrobić.


--------------------
Go to the top of the page
+Quote Post
viking
post 3.06.2022, 15:45:22
Post #14





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Stare, ciągle aktualne https://prophp.pl/article/3/kodowanie_znakow_na_stronach_www


--------------------
Go to the top of the page
+Quote Post
maraska
post 6.06.2022, 15:07:34
Post #15





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
gino
post 6.06.2022, 17:03:03
Post #16





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


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ł.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 10:40