Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Generowanie pliku XML i wieczny problem z Polskimi znakami.
luis2luis
post 19.08.2020, 09:14:42
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


Wiecznie mam problem z Polskimi znakami.
Radze sobie jakoś z tym, ale nie rozumie wcale zagadnienia.

Leciwy już iconv() nigdy nie udało mi się poprawnie uruchomić smile.gif
Jest jeszcze utf8_encode() i utf8_decode() też nie wiem po co to jest w sumie jak jest iconv() ktory powinien takie sprawy załatwić smile.gif
Dane z bazy pobierane są poprawnie w formacie UTF-8.

  1. $result_xml = utf8_encode($result_xml);
  2.  
  3. $dom = new DOMDocument('1.0', 'UTF-8');
  4. $dom->preserveWhiteSpace = FALSE;
  5. //$dom->loadXML(utf8_encode(clearExport($result_xml))); //probowalem tez tak
  6. $dom->loadXML(clearExport($result_xml));
  7. $dom->save('xml/brandbank_.xml');//'.date("YmdHis").'
  8.  
  9. //kasuje z xmla znaki które kolidują, szkoda, że metoda save nie dba o to :)
  10. function clearExport($value) {
  11. //$value = str_replace(';', ',', $value);
  12. $value = str_replace('\"', "'", $value);
  13. //$value = str_replace('"', "'", $value);
  14. $value = str_replace('*', "", $value);
  15. $value = str_replace('&', "", $value);
  16.  
  17. //$liczba = preg_replace('#[^0-9\.\-]#', '', $liczba);//tyo cyferki i kropka
  18. return $value;
  19. }
  20.  
  21.  


Mam też takąfunkcje, która wygenerowąła mi poprawny xml, jednak nie wiem czy bedzie to dobre rozwiazanie. Jak pojawi się jakiśinny znak spoza tej tablicy bedzie problem.


  1. function polskie_znaki($string) {//zamienia polskie literki z ajaxa; $przelocznik
  2.  
  3. $specialChars = [
  4. 'Ä?',
  5. 'Ä?',
  6. 'Ĺş',
  7. 'Ĺą',
  8. 'Ĺź',
  9. 'Ĺ?',
  10. 'Ĺ?',
  11. 'Ĺš',
  12. 'Ä?',
  13. 'Ä?',
  14. 'Ä?',
  15. 'Ę',
  16. 'Ĺ?',
  17. 'Ń',
  18. 'Ĺ?',
  19. 'Ł',
  20. 'Ăł',
  21. 'Ă?',
  22. ];
  23.  
  24. $polishHtmlCodes = [
  25. 'ą',
  26. 'Ą',
  27. 'ź',
  28. 'Ź',
  29. 'ż',
  30. 'Ż',
  31. 'ś',
  32. 'Ś',
  33. 'ć',
  34. 'Ć',
  35. 'ę',
  36. 'Ę',
  37. 'ń',
  38. 'Ń',
  39. 'ł',
  40. 'Ł',
  41. 'ó',
  42. 'Ó',
  43. ];
  44.  
  45. return str_replace($specialChars, $polishHtmlCodes, $string);
  46. }
  47.  


Ten post edytował luis2luis 19.08.2020, 09:24:15
Go to the top of the page
+Quote Post
SmokAnalog
post 19.08.2020, 10:04:18
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nie do końca rozumiem o co Ci chodzi.

Zrobiłem mały test z takim plikiem XML (input.xml):

  1. <?xml version="1.0"?>
  2. <catalog>
  3. <book>
  4. <title>Łódź w śwince źródlanej</title>
  5. </book>
  6. </catalog>


  1. $xml = file_get_contents('input.xml');
  2. $dom = new DOMDocument('1.0', 'UTF-8');
  3. $dom->loadXML($xml);
  4. $dom->save('output.xml');


Wynik w output.xml:

  1. <?xml version="1.0"?>
  2. <catalog>
  3. <book>
  4. <title>&#x141;&#xF3;d&#x17A; w &#x15B;wince &#x17A;r&#xF3;dlanej</title>
  5. </book>
  6. </catalog>


Wygląda na to, że działa to prawidłowo. O ile mi wiadomo, polskie (i jakiekolwiek inne akcentowane) znaki nie powinny się pojawiać w pliku XML. Ale plik zapisał te znaki poprawnie w formie encji szesnastkowych.
Go to the top of the page
+Quote Post
luis2luis
post 19.08.2020, 10:23:23
Post #3





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


Cytat(SmokAnalog @ 19.08.2020, 11:04:18 ) *
Wynik w output.xml:

  1. <?xml version="1.0"?>
  2. <catalog>
  3. <book>
  4. <title>Łódź w śwince źródlanej</title>
  5. </book>
  6. </catalog>


Wygląda na to, że działa to prawidłowo. O ile mi wiadomo, polskie (i jakiekolwiek inne akcentowane) znaki nie powinny się pojawiać w pliku XML. Ale plik zapisał te znaki poprawnie w formie encji szesnastkowych.


Dziekuje bardzo za fatygę. Również otrzymałem taki wynik, jednak system, który pobiera ten plik odrzuca go.

Dostałem komunikat:
Cytat
As we checked, the error was caused by the contents in Description, which should only include numbers and letters


Czyli potrzebują tylko literki i cyfry smile.gif Więc można zapisać ten plik xml w innym formacie niż encji szesnastkowych?

Ten post edytował luis2luis 19.08.2020, 10:31:18
Go to the top of the page
+Quote Post
trueblue
post 19.08.2020, 10:34:29
Post #4





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

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


A może komunikat jest mylący, a Description zawiera inny problematyczny znak?


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post 19.08.2020, 10:36:13
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Tylko litery i cyfry, ale to w jakimś systemie zewnętrznym, który czyta Twój XML? Jeśli tak, to problemem (o ile czytają XML prawidłowo) nie jest jego reprezentacja, tylko treść, którą im wysyłasz. Może w ogóle nie obsługują polskich znaków, tylko mają jakiś zwykły regex [a-zA-Z0-9]+? Dziwna sprawa. Napisz coś więcej co robisz z tym XML-em.
Go to the top of the page
+Quote Post
luis2luis
post 19.08.2020, 10:39:20
Post #6





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


Cytat(trueblue @ 19.08.2020, 11:34:29 ) *
A może komunikat jest mylący, a Description zawiera inny problematyczny znak?


Pole description to znacznik z opisem. Problemem są tu właśnie Polskie znaki zapisane w sposób: &#x141;&#xF3;d&#x17A;

Myślę, żeby Polskie znaczki usunąć albo zapisać je nie za pomocą formatu: &#x141;
Go to the top of the page
+Quote Post
SmokAnalog
post 19.08.2020, 10:43:29
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Musisz rozdzielić dwie rzeczy. Format zapisu a treść to są osobne sprawy.

Zakładam, że system, który konsumuje Twój XML działa prawidłowo. Jeśli tak jest, to sposób zapisu - o ile zgodny ze standardami XML - ich nie powinien obchodzić. Interesuje ich wyłącznie treść poszczególnych pól, np. Description. Trudno z Twojego posta wywnioskować o co chodzi z tym Description, ale trochę dziwne mi się wydaje, żeby pole z opisem (ang, description) przyjmowało tylko litery i cyfry.
Go to the top of the page
+Quote Post
luis2luis
post 19.08.2020, 10:59:59
Post #8





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


Cytat(SmokAnalog @ 19.08.2020, 11:43:29 ) *
Musisz rozdzielić dwie rzeczy. Format zapisu a treść to są osobne sprawy.

Zakładam, że system, który konsumuje Twój XML działa prawidłowo. Jeśli tak jest, to sposób zapisu - o ile zgodny ze standardami XML - ich nie powinien obchodzić. Interesuje ich wyłącznie treść poszczególnych pól, np. Description. Trudno z Twojego posta wywnioskować o co chodzi z tym Description, ale trochę dziwne mi się wydaje, żeby pole z opisem (ang, description) przyjmowało tylko litery i cyfry.



Description to jest jeden z Tagów. I problemem jest treść tego znacznika a mianowicie Polskie znaki w nim użyte zapisasne w sposób: Łódź
  1. <?xml version="1.0"?>
  2. <catalog>
  3. <book>
  4. <Description>Treśc znacznika </Description>
  5. <title>Łódź w śwince źródlanej</title>
  6. </book>
  7. </catalog>


Ten post edytował luis2luis 19.08.2020, 11:00:28
Go to the top of the page
+Quote Post
SmokAnalog
post 19.08.2020, 11:04:13
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


A próbowałeś na sucho wysłać te polskie znaki w różnych formach, czyli bezpośrednio, dziesiętnie i heksadecymalnie?
Go to the top of the page
+Quote Post
trueblue
post 19.08.2020, 12:04:18
Post #10





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

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


Chodziło mi o to, czy już po zamianie na encje nie pozostaje jakiś znak, który skutkuje takim komunikatem (on jest przyczyną, a nie encje).


--------------------
Go to the top of the page
+Quote Post
luis2luis
post 19.08.2020, 12:19:40
Post #11





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


Cytat(trueblue @ 19.08.2020, 13:04:18 ) *
Chodziło mi o to, czy już po zamianie na encje nie pozostaje jakiś znak, który skutkuje takim komunikatem (on jest przyczyną, a nie encje).

Wg komunikatu w tagu tym mogą być tylko cyfry i litery więc znak np & który jest częścią znaku powoduje błąd.
Go to the top of the page
+Quote Post
SmokAnalog
post 19.08.2020, 13:10:23
Post #12





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Cytat(luis2luis @ 19.08.2020, 13:19:40 ) *
Wg komunikatu w tagu tym mogą być tylko cyfry i litery więc znak np & który jest częścią znaku powoduje błąd.

Przeczytaj jeszcze raz to, co napisałem wyżej. Jeżeli jest tak jak mówisz, to ten system ma kompletnie bezsensowną walidację. Walidacja oparta na reprezentacji wartości jest idiotyczna. Jestem na 99% pewien, że nie o to chodzi.

Dobrze, więc z tego co mówisz, ten system pozwala na litery i cyfry. Czy testujesz na takiej wartości, tj. na literach i cyfrach? Bo jak wstawiłem powyższy przykład ze świnką, to testowałeś na nim, a przecież tam jest spacja. Spacja nie należy ani do liter, ani do cyfr, prawda?

Zrób prosty test - spróbuj wstawić wartość abc jako Description i zobacz czy przyjmie. Pewnie przyjmie. To teraz spróbuj wstawić wartość & #97;& #98;& #99; (usuń spacje - musiałem je wstawić, bo ten durny system forum ślepo zamienia wszystko), która jest po prostu inaczej zapisanym abc.

Ten post edytował SmokAnalog 19.08.2020, 13:21:41
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: 23.04.2024 - 17:26