Kurt: trim

Hallo,

$bezeichnung=trim($fe[4], '"'); // Entfernt " am Anfang und Ende sollte mir grad alle " am Anfang und Ende der zu behandelnden Strings löschen. Das macht trim aber grad nicht.

Hat jemand ne Idee, warum?

  
$bezeichnung=trim($fe[4], '"'); // Entfernt " am Anfang und Ende  
$bezeichnung=str_replace('""', '"', $bezeichnung);  
$bezeichnung=trim(mysql_real_escape_string($bezeichnung));  
echo($fe[4]." -- ".$bezeichnung."<BR>");  

ergibt:

"N-Stück 10 m, 1/2"" mini" -- N-Stück 10 m, 1/2" mini"\r\n

und nicht, wie erwartet

"N-Stück 10 m, 1/2"" mini" -- N-Stück 10 m, 1/2" mini\r\n

Schönen Tag. Kurt

  1. hi,

      
    <?php  
    $testString = '"""aaa"""""';  
    $result = trim($testString,'"');  
    var_dump($result);  
    
    

    ergibt:

    string(3) "aaa"

    mfg

    tami

  2. Hi,

    $bezeichnung=trim($fe[4], '"'); // Entfernt " am Anfang und Ende

    nehmen wir mal an, dass am Ende gar kein Anführungszeichen steht, sondern ein Zeilenumbruch (\r\n), wo immer der auch herkommen mag. Dann wird dort auch nichts entfernt. Die spannende Frage ist also zunächst mal: Was steht zu Beginn *wirklich* in $fe[4]? Meine These ist (in PHP-Notation):

    "\"N-Stück 10 m, 1/2\"\" mini\"\r\n"

    Dann entfernt der Aufruf von trim() oben nur das Anführungszeichen am Anfang, denn am Ende des Strings ist ja keins.

    $bezeichnung=str_replace('""', '"', $bezeichnung);

    Das macht aus dem zweimal auftretenden Anführungszeichen in der Mitte nur noch eines.

    $bezeichnung=trim(mysql_real_escape_string($bezeichnung));

    Und das maskiert alle für die SQL-Schnittstelle problematischen Zeichen. Der erneute Aufruf von trim() ist hier wirkungslos, weil mysql_real_escape_string() den Zeilenumbruch \r\n am Ende bereits durch die Einzelzeichen Backslash, r, Backslash, n ersetzt hat.

    So long,
     Martin

    --
    Das Leben ist lebensgefährlich und endet meistens tödlich.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. Moin!

    $bezeichnung=trim($fe[4], '"'); // Entfernt " am Anfang und Ende

    ...

    echo($fe[4]." -- ".$bezeichnung."<BR>");

    
    >   
    > ergibt:  
    >   
    > "N-Stück 10 m, 1/2"" mini" -- N-Stück 10 m, 1/2\" mini\"\r\n  
      
    Da ich nicht sehe, woher \r\n am Ende kommt VERMUTE ich, dass Dein $fe[4] den Windows-Zeilenumbruch schon enthält, das Quota als nicht das letzte Zeichen ist. Damit stelle als Vorschlag:  
      
    `$bezeichnung=trim( trim($fe[4]), '"' );`{:.language-html}  
      
    in den Raum.  
      
      
    [Jörg Reinholz](http://www.fastix.org)  
    
    
    1. Hallo,

      Damit stelle als Vorschlag:

      $bezeichnung=trim( trim($fe[4]), '"' );

      guter Vorschlag, oder noch etwas einfacher mit nur _einem_ Funktionsaufruf:

      $bezeichnung=trim($fe[4], "\r\n\t \"");

      Ciao,
       Martin

      PS: Codeauszüge bitte auch richtig kennzeichnen, also PHP nicht als HTML. :-)

      --
      Fische, die bellen, beißen nicht.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  4. Hat jemand ne Idee, warum?

    Danke, jetzt wird es klarer.
    Am Ende des Strings war gar kein ", daher konnte es natürlich nicht entfernt wreden, dem \r\n sei dank.

    Kurt