logo
05.08.2020 16:37
1
Poradí prosím někdo, jak se zbavit symbolu "průměr" ⌀ z XML dokumentu a to přímo v PHP? Potřebuji dostat XML do databáze.
05.08.2020 16:56
2
Kdyz das odkaz na ten XML soubor a uvidime v jakem formatu tam ten znak je zapsan, tak i dokazu poradit, jak se ho zbavit. Nahrada znaku nemusi fungovat, kdyz tam bude treba entita.
05.08.2020 17:05
3
Původně odeslal musil.david
Kdyz das odkaz na ten XML soubor a uvidime v jakem formatu tam ten znak je zapsan, tak i dokazu poradit, jak se ho zbavit. Nahrada znaku nemusi fungovat, kdyz tam bude treba entita.
Poslal jsem PM s odkazem. Není to tam právě jako entita.

Stačí vyhledat např. EAN 8595126976695 a v Properties->Property je ten průměr.
05.08.2020 17:15
4
A jednoduche nepujde?

Kód:
str_replace('⌀', 'prům.', $text);

//$text je ten obsah, ze ktereho to davas pryc.
Poradil jsi si s parsovanim a tohle nejde? :)
05.08.2020 17:34
5
No právě že nejde... Za prvé ten znak na průměr nezná ani PSpad ani Notepad++. Soubor se tváří, že je kódován v UTF-8, ale jak jej tam dostali je mi záhadou. Jde to otevřít v poznámkovém bloku a dám tam ten symbol průměru, ale i tak se prostě neodstraní.

Dostanu tohle chybovou hlášku:
Error description: Incorrect string value: '\x80 sac\xC3...' for column 'Properties' at row 1 Product-code:414262

Taktéž když si zobrazím, co se vkládá do databáze dostanu:
Max. průtok:3080l/h = 52l/min|Napětí/frekvence:230V/50Hz|� sacího/výstup. hrdla:1"|Příkon:500W|Max. výtlak:31m|Max. sací hloubka:9m|Značka:EXTOL CRAFT|Hmotnost:9kg

Místo ⌀ je tam �
05.08.2020 18:58
6
Ten znak má 3 bajty v UTF-8 (0xE2 0x8C 0x80), pokud se to vloží do kódu přímo znak, tak to asi převede do UTF-16 a to je 0x23 0x00. Už jsem dlouho nedělal nic v php, ale nejdřív bych si to asi převedl na jiné kódování.
05.08.2020 19:39
7
Původně odeslal JakubStan
Ten znak má 3 bajty v UTF-8 (0xE2 0x8C 0x80), pokud se to vloží do kódu přímo znak, tak to asi převede do UTF-16 a to je 0x23 0x00. Už jsem dlouho nedělal nic v php, ale nejdřív bych si to asi převedl na jiné kódování.
No problém je, že xml soubor je v UTF-8. Zkoušel rozné formy převodu, ale problém je, že nemůžu určit výchozí kódování toho znaku. UTF-8 jako zbytek souboru to není, tudíž nevím, co s tím PHP při načtení do proměnné provede. UTF-16 to ale také není. Zkoušel jsem pomocí převodových tabulek zachytit tento znak. Pokud převodu celé XML do jiného kódování, dostanu prakticky to samé. Zase nejsem schopný ten znak nahradit.
05.08.2020 20:04
8
Hodně editorů matlá UTF-8 znaky, které mají 3 bajty, jak se jim zachce. Proto je potřeba se podívat na ten soubor nějakým hexa prohlížečem, který ukazuje reálná data.
06.08.2020 10:06
9
A potřbuješ v DB to xml čitelné? Jak často se hodnoty z db loadují, vyhledáváš nad tím nějak? Co je to za db? :)

Můžeš to třeba zakodovat do base64 a nebude tě nic víc trápit, osobně nejraději ukládám takováhle data převedená do json dat v postgresu, dovoluje ti to pak mít datový typ jsonb, kde můžeš nativně vyhledávat pomocí query i v json struktuře (bez %like% a podobných zhůvěřilostí)
06.08.2020 12:47
10
Problém je již vyřešen. Nakonec jsem zjistil, že chyba byla ve velikosti. V xml feedu byl znak ⌀ uveden jako velké písmeno/znak. Všechny editory, prohlížeče atd. to dokázaly zpracovat a zobrazit správně jako onen znak, avšak PHP to nedokáže. Všechny texty v této části xml jsou malým písmem, tak by mě nenapadlo, že zrovna znak bude velkým. Stačí tedy převést znak ⌀ na malý a následně již vše v PHP funguje. Zádrhel byl, že pokud se znak kopíroval, tak se automaticky převedl na malý. Oznámil jsem to i adminovi, co má vše ohledně feedu na starosti a nyní se znak ve feedu uvádí jako malý standardně, aby s tím nikdo další neměl problém.