Portál AbcLinuxu, 12. května 2025 07:34

Dotaz: Záhada při zápisu z mysql do xml

29.4.2013 00:57 bajt | skóre: 1
Záhada při zápisu z mysql do xml
Přečteno: 278×
Odpovědět | Admin
Příloha:
Při exportu popisu zboží z mysql tabulky chci do xml zapsat pouze prvních 100 znaků, což funguje skvěle, avšak pokud zrovna ten 300stý znak je nějaká čeština (ý,ú,ů,ž,š...) tak se mi do xml vždy zapíše místo něj "záhadný znak" viz.příloha.

Pro oříznutí popisu používám tuto php fci: (substr(str_ireplace($line[popis], 0, 100))

Výsledkem by mělo být toto, avšak pokud na konci narazí na češtinu (viz.zde na "í") pak je problém. Správně by mělo být: "BEZZÁTĚŽOVÝ DIGITÁLNÍ TESTER BATERIÍ PRO 12V 2-200AH (od typů BT001, BT301 a BT501 se liší"

Nemáte někdo tušení proč a jak se toho zbavit??

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (DarkKnightCZ)
29.4.2013 01:44 Sten
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Odpovědět | | Sbalit | Link | Blokovat | Admin
substr neořezává znaky, ale bajty. A ten text je zřejmě v UTF-8, kde jeden znak může mít až šest bajtů. Pro práci se znaky je mb_substr.
29.4.2013 11:49 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Příloha:
ano, text je v UTF-8

Vyzkousel jsem jak jste radili mb_substr a to nasledovne ve dvou verzich: (je tam jeste navic i str_ireplace)

- mb_substr((str_ireplace($replace, "\r\n", $line[popis])), 0, 100) - (substr(mb_substr((str_ireplace($replace, "\r\n", $line[popis])), 0, 100), 0, 100))

Ale stejne se to tam poradne vyskytuje - viz.priloha....nemate pls jeste nejaky dalsi napad?
29.4.2013 12:03 chrono
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Čo vypíše volanie funkcie mb_internal_encoding() ? (pretože je pravdepodobné, že mbstring knižnica nevie, že je to v utf-8 kódovaní)
29.4.2013 12:08 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
vypise toto: ISO-8859-1 Toz co ted s tim pls?
29.4.2013 12:28 chrono
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Buď sa pri každej mb_ funkcii použije aj parameter s kódovaním, alebo sa nastaví kódovanie pre všetky mb_ funkcie pomocou mb_internal_encoding("UTF-8");
29.4.2013 12:31 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Dobre a pokud bych chtel pouzit parametr s kodovanim v danem skriptu jen pro tuto fci "mb_substr" tak jak to mam pls spravne do skriptu zapsat?
29.4.2013 13:05 Kit
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Přestaň si s tím hrát v PHP a udělej to pořádně v SQL.
29.4.2013 13:11 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Diky za salamounskou odpoved, ale jak teda to udelat v SQL? :-)
29.4.2013 13:31 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
jeste neco: mysql databaze je jiz nasazena a pouzivana roky a tudiz vsechny k ni naprogramovane aplikace jsou k ni prizpusobeny, ja ted jen chci delat kazdodenni vystupy z jedne tabulky do xml a z toho duvodu nejake zmeny v SQL by nebyly kvuli toho idealni pac kdo vi jake mozne problemy by to mohlo prinest a tudiz to chci primarne osetrit pouze v php, predem diky za jakekoliv konstruktivni reseni!
29.4.2013 13:43 Kit
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Však jsem to už psal o kousek níž. Takže polopatě:
SELECT SUBSTR(popisek, 1, 100) AS popis FROM tabulka WHERE id = ?;
29.4.2013 14:01 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Nebo LEFT() mi přijde takové elegantnější :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
29.4.2013 14:11 Kit
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Jistě, MySQL je takovými a podobnými funkcemi vybaveno o něco lépe než PHP. I datum je obvykle lepší posouvat a formátovat přímo v databázi. Dá se tak vyhnout problémům, které vloni postihly státní registry.
29.4.2013 13:44 chrono
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
mb_substr((str_ireplace($replace, "\r\n", $line[popis])), 0, 100, "UTF-8"); (predpokladám ale, že premenná $replace obsahuje len ascii znaky)
29.4.2013 14:41 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
diky! vyzkousim obsahuje toto: $replace = array("<br />","<br/>","<br>","
","
","
");
29.4.2013 14:44 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Příloha:
ajeje formatovani - viz.radeji prilozeny obrazek :-)
29.4.2013 15:54 Kit
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
A tohle děláš proč? Ty dáváš do databáze HTML?
29.4.2013 16:22 bajt | skóre: 1
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
nedavam, ale kdysi drive se tam pres puvodni uzivatele aplikace dostalo (pouze v popisech zbozi)
29.4.2013 16:09 chrono
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
V takomto prípade nevadí, keď sa na nahradenie použije str_ireplace.
29.4.2013 10:00 Kit
Rozbalit Rozbalit vše Re: Záhada při zápisu z mysql do xml
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě to jde oříznout přímo v SQL dotazu funkcí SUBSTR(string, odkud, kolik). S UTF-8 pracovat umí.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.