Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Rozdzielenie danych explode, Rozdzielnie danych przecinkiem i cudzysłów
nowyyy31
post 8.07.2012, 20:47:36
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 20.08.2007
Skąd: Kartuzy

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


Witam,

Próbuje rozdzielić tekst który jest w cudzysłowiu i dzielony jest przecinkiem, na przykład:

"Moja podstrona", "http://www.mojasuperdomena.pl/podstrona,nr,3.html"
"Moja strona www", "http://www.mojasuperdomena.pl"

Poprzesłanianiu takich danych przez formularz chciałbym uzyskać treść bez cudzysłowów.
udało mi się uzyskać taki kod, ale cudzysłów zostaje.
  1. $_linie = explode("\r",$dane_post);
  2. $ile = count($_linie);
  3. if ($ile>0) {
  4. foreach($_linie as $linie) {
  5. $linie = substr($linie,0,255);
  6. $linie = trim($linie);
  7. $linie = eregi_replace("([[:space:]]+)", " ", $linie);
  8. $dane = explode(",", $linie);
  9.  
  10.  
  11. $title = $dane[0];
  12. $url = $dane[1];
  13.  
  14. echo $title //Moja strona
  15. echo $url // ttp://www.mojasuperdomena.pl
  16.  
  17. }
  18. }


Ten post edytował nowyyy31 8.07.2012, 20:51:21
Go to the top of the page
+Quote Post
SmokAnalog
post 8.07.2012, 20:52:32
Post #2





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

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


Ten format danych to Comma-separated Values (CSV). Myślę, że najbardziej elegancko byłoby użyć w tym celu wbudowanych funkcji do obsługi tego formatu.
Go to the top of the page
+Quote Post
djgarsi
post 8.07.2012, 21:01:27
Post #3





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


Hm. Wg mnie najpierw explode po przecinku a później str_replace na cudzysłów.


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post 8.07.2012, 21:06:41
Post #4





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

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


Kolego wyżej, jeśli jesteś aspirującym programistą, musisz nauczyć się analizować wszystkie przypadki. W danych mogą być zawarte cudzysłowy, a nikt nie będzie szczęśliwy, jeśli ot tak sobie znikną. Ewentualnie można użyć odpowiedniego wzorca dla preg_match lub po explode usunąć pierwszy i ostatni znak, ale namawiam na obsługę CSV z prawdziwego zdarzenia. Nauczysz się czegoś nowego i potraktujesz dane jak należy.
Go to the top of the page
+Quote Post
nowyyy31
post 8.07.2012, 21:18:36
Post #5





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 20.08.2007
Skąd: Kartuzy

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


Czy do funkcji fgetcsv można przesłać prosto dane z $_POST czy trzeba najpierw zapisać do CSV?

  1. while($dane = fgetcsv($url,100, ",")){
  2.  
  3. print_r($dane);
  4. }
Go to the top of the page
+Quote Post
konrados
post 8.07.2012, 21:29:46
Post #6





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


Użyj raczej tego: http://php.net/manual/en/function.str-getcsv.php
Możesz tam zapodać zwykły string a nie ścieżkę do pliku.

Ten post edytował konrados 8.07.2012, 21:30:24
Go to the top of the page
+Quote Post
nowyyy31
post 9.07.2012, 17:55:58
Post #7





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 20.08.2007
Skąd: Kartuzy

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


Udało mi się stworzyć kod:

  1. $url=$_POST['url'];
  2. $delimiter = ',';
  3. $enclosure = '"';
  4. $csvfile = str_getcsv($url, $delimiter, $enclosure);
  5. print_r($csvfile);


Który teoretycznie będzie działać tylko napotkałem inny problem bo nie mogę użyć funkcji str_getcsv gdyż nie działa na moim serwerze. ;/

Czy jest jeszcze jakiś sposób żeby uzyskać efekt o którym pisałem w pierwszym poście?
Go to the top of the page
+Quote Post
IProSoft
post 9.07.2012, 19:00:23
Post #8





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


W komentarzach masz zamienniki, np:
http://www.php.net/manual/pl/function.str-getcsv.php#105209


--------------------
Manual prawdę Ci powie.
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.07.2025 - 09:19