CSV Syntax mit Quotes

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CSV Syntax mit Quotes

    Hey,
    also ich habe eine Textbox und in dieser soll man die Parameter von einer PHP Funktion eintragen können. Das sieht im Moment so aus:
    [htmlentities] (Textbox)
    In dieser Textbox soll man jetzt zuerst den String eingeben, den man mit htmlentities bearbeiten möchte, also z.B. "Ich bin ein Text". Jetzt soll man aber auch die Möglichkeit haben hinter den String Parameter mitzugeben, z.B.
    ("ich bin ein Text!", ENT_QUOTES)
    Mein Problem ist jetzt, dass ich nicht weiß wie man jetzt die Parameter ausfindig macht ^^
    Wenn ich das mit , trenne, dann kann sowas ja auch passieren:
    ("Ich bin, ein Text!", ENT_QUOTES)
    Somit wären das 3 Parameter!
    1. "Ich bin
    2. ein Text!
    3. ENT_QUOTES

    Weiß jetzt jemand, wie ich herausfinden kann, ob das Komma in einem String steht oder nicht?
    Danke schon mal!
  • Hi, das ist ein typisches Problem beim Parsen von CSV Files.
    Mal gibt es umschließende Anführungszeichen, mal nicht.
    Google am besten mal nach [google]php csv parser[/google].

    Auch in den Kommentaren zu [phpdoc]fgetcsv[/phpdoc] gibts ein paar nützliche Funktionen.
    Vermutlich ist die einfachste Variante wirklich den String Zeichen für Zeichen durchzugehen und nach dem Trennzeichen zu schauen ob das nächste Zeichen ein String wird.
    Dann setzt du ein Flag und vor dem nächsten Trennzeichen schaust du ob der String geschlossen wird.
    Escapete Anführungszeichen musst du natürlich auch berücksichtigen.

    Nimm also einfach eine Klasse aus den Google Ergebnissen.

    PS: Du postest im falschen Forum??? Moved!
  • Danke d0nut,
    leider war nie so das richtige dabei ^^
    darum habe ich mal selber was gecodet. Hat mich einen halben Tag arbeit gekostet, da es nie mit den while Schleifen hingehauen hat :p

    Quellcode

    1. <?php
    2. $input = "\"String mit, KOMMA\", ENT_QUOTES, PARAM2";
    3. $foundparam = false;
    4. while ($kommapos = strpos($input, ",", $kommapos + 1))
    5. {
    6. $counter = 0;
    7. $offset = 0;
    8. while (($offset = strpos($input, "\"", $offset)) < $kommapos && $offset !== false)
    9. {
    10. $offset++;
    11. $counter++;
    12. }
    13. if (!($counter % 2))
    14. {
    15. $temp[] = substr($input, $realkomma, $kommapos - $realkomma);
    16. $realkomma = $kommapos;
    17. $foundparam = true;
    18. }
    19. }
    20. if ($foundparam)
    21. $temp[] = substr($input, $realkomma, strlen($input));
    22. foreach ($temp as $key => $value)
    23. {
    24. if ($temp[$key][0] == ',')
    25. $temp[$key] = trim(substr($value, 1, strlen($value)));
    26. else
    27. $temp[$key] = trim($value);
    28. }
    29. echo "<pre>";
    30. print_r($temp);
    31. echo "<pre>";
    32. ?>
    Alles anzeigen


    Ausgabe:
    Array
    (
    [0] => "String mit, KOMMA"
    [1] => ENT_QUOTES
    [2] => PARAM2
    )

    Funktioniert super ^^
    Ich glaub das können viele gebrauchen, oder? :p

    Ich schreib noch ein paar Schlüsselwörter rein, damit das auch Leute von Google oder aus dem Forum finden.
    csv, parser, php, str_getcsv, fgetcsv, parameter trennen
  • Tag V.R. ;)
    Andere möglichkeit (die aber nur funktioniert, wenn innerhalb der zeile 100% kein NUL bzw \00 vorkommt):

    Quellcode

    1. <?php
    2. $input = '"String mit, KOMMA", ENT_QUOTES, PARAM2, "zomfgroflololol", "", ","';
    3. $string = preg_replace_callback('#(")[^"]*(")#i',create_function('$var','return str_replace(",","\00",$var[0]);'),$input);
    4. $array = explode(',',$string);
    5. foreach ($array as $key => $val)
    6. {
    7. $array[$key] = str_replace("\00",',',$val);
    8. $array[$key] = trim($array[$key]);
    9. }
    10. ?>


    PS: PM mich mal ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von GanjaLatte ()