Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenie regularne i CDATA
Pozycjonowanie i Optymalizacja > Projektowanie stron > PHP i MySQL
Mejdej
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">&quot;1000 G&quot;</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>http://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ś?
Mion
W ogóle jaki jest sens przechowywać dane w bazie w takiej formie, ale jak już musisz to masz do dyspozycji funkcję :
http://php.net/manual/pl/function.mysql-re...cape-string.php
http://php.net/manual/en/function.addslashes.php


Mejdej
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.
Mion
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.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
---
Lub okienkowym programem mysql administrator http://dev.mysql.com/downloads/gui-tools/5.0.html
http://www.idg.pl/ftp/pc_12135/MySQL.Admin...or.5.0.r.3.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.