Skocz do zawartości

[PHP] Wyrażenie regularne i CDATA


Mejdej

Rekomendowane odpowiedzi

Witam,

Potrzebuje porady kogoś bardziej zorientowanego w wyrażeniach regularnych, bo chyba bez nich nic nie zrobię.

Problem mam taki, że mam 45Mb danych do wgrania do bazy. Są wyeksportowane, ale przy imporcie wyskakują błędy. Jest to spowodowane tym, że w jednym z pol są dane CDATA, w których to są apostrofy. Właśnie te apostrofy "gryzą" się z apostrofami nadrzędnymi.

Przykładowy string do wstawienia:

INSERT INTO xml (id, id_flash, name, xml, class, subclass, quality, slot, icon, level) VALUES('7', '11766', '1000G', '<?xml version="1.0" encoding="UTF-8"?><gem><item id="7"><name><![CDATA[1000G]]></name><level>1</level><quality id="2">Uncommon</quality><class id="7"><![CDATA[Trade Goods]]></class><subclass id="0"><![CDATA[]]></subclass><icon displayId="11766">ss_gem_lo_02</icon><inventorySlot id="0"></inventorySlot><htmlTooltip><![CDATA[<table><tr><td><b class="q2">1000G</b></td></tr></table><table><tr><td><span class="q">"1000 G"</span></td></tr></table>]]></htmlTooltip><json><![CDATA[id:7,name:'51000G',level:1,reqlevel:1,slot:0,classs:7,subclass:0]]></json><jsonEquip><![CDATA[reqlevel:1,sellprice:10000000]]></jsonEquip><link>https://www.page.com/?item=7</link></item></gem>', '7', '0', '2', '0', 'ss_gem_lo_02', '1');

Pomyślałem, że jak przemiele wszystko skryptem i poprzedze wszystkie apostrofy wewnątrz CDATA znakiem "\" to będzie wszystko dobrze.

Tylko nie mam pojęcia jak zbudować potrzebne wyrażenie regularne.

Pomoże ktoś?

Odnośnik do komentarza
Udostępnij na innych stronach

W ogóle jaki jest sens przechowywać dane w bazie w takiej formie, ale jak już musisz to masz do dyspozycji funkcję :

https://php.net/manual/pl/function.mysql-re...cape-string.php

https://php.net/manual/en/function.addslashes.php

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Hmmm... tylko chodzi o to, ze ja te dane mam juz wyeksportowane. Wiec mam wielki plik tekstowy z takimi wlasnie liniami jak w przykladzie. Jesli uzyje addslashes na calosci to chyba nic to nie da. Te slashe powinny byc dodane tylko wewnatrz CDATA. Niestety nie mam dostepu do zrodlowej bazy, wiec nie moge tego "importowac" phpem zeby zrobic to jak nalezy. Teraz, wedlug mnie, musze tylko wydobyc jakos wnetrze CDATA, na tym wydobytym wnetrzu zastsowac funkcje addslashes i wtedy bede mogl to wszystko w importowac przez phpMyAdmina. Dlatego wydaje mi sie, ze bez wyrazenia regularnego nic sie nie zrobi.

Odnośnik do komentarza
Udostępnij na innych stronach

Przede wszystkim program który eksportował dane powinien zrobić to w formacie możliwym do ich importu. Poproś, lub sam wykonaj programem mysqldump eksport danych, a na serwerze docelowym tym samym programem import.

https://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

---

Lub okienkowym programem mysql administrator https://dev.mysql.com/downloads/gui-tools/5.0.html

https://www.idg.pl/ftp/pc_12135/MySQL.Admin...or.5.0.r.3.html

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności