Leerzeichen irritieren strlen()

  • Sei froh das ich gerade nicht in deiner Nähe bin :mrgreen:


    Gucke dir bitte noch ein mal an wozu substr gedacht ist und wie es funktioniert, aber vor allem was es zurück gibt...


    Kleiner Tipp:


    PHP
    1. <span class="syntaxdefault"><br />  if</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'hallo'</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// trifft auf jeden Fall zu<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">// Code<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span>


    Noch ein Tipp:


    Was du brauchst ist strlen

  • &quot;Basiii&quot; schrieb:

    Sei froh das ich gerade nicht in deiner Nähe bin :mrgreen:


    :wink:

    &quot;Basiii&quot; schrieb:

    Noch ein Tipp: Was du brauchst ist strlen


    Jop auch grad gemerkt, so will er aber irgendwie auch nicht


    Zeigt OK an..

  • PHP
    1. <span class="syntaxdefault"><?php<br /><br /> $string </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$string </span><span class="syntaxkeyword">= </span><span class="syntaxstring">'Ein Text der l&auml;nger als 5 Zeichen ist.'</span><span class="syntaxkeyword">;<br /> </span><span class="syntaxdefault">$string </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">trim</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$string</span><span class="syntaxkeyword">);<br /><br /> if(</span><span class="syntaxdefault">5 </span><span class="syntaxkeyword">< </span><span class="syntaxdefault">strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$string</span><span class="syntaxkeyword">))<br /> {<br /> print </span><span class="syntaxstring">'Maximal 5 Zeichen erlaubt'</span><span class="syntaxkeyword">;<br /> }<br /> else<br /> {<br /> print </span><span class="syntaxstring">'OK'</span><span class="syntaxkeyword">;<br /> }<br /><br /></span><span class="syntaxdefault">?><br /></span>
  • Ja na klar denn es sollten mehrere Leerzeichen die auch als Zeichen gelten entfernt werden, sagen wir ein Formular mit max 10000 Zeichen und der Benutzer gibt mit ganz ganz vielen leerrzeichen 20000 Zeichen ein....


    Darauf wird nicht geprüft?

  • &quot;Sarkkan&quot; schrieb:

    Meistens wendet man trim() an und überprüft dann ob der eingegebene String größer wie Null ist und nicht länger als Maximal erlaubt.


    Aber darum ging es mir nicht, es ging mir mehr um strlen($var > 5).



    Lool, das es dir nicht darum geht hilft mir in diesem Fall nicht wirklich..


    Sieh her:



    Oben klappt es ganz normal


    -----------------------------------------


    Und so klappt es nicht, da er die Leerzeichen mit einrechnet:



    Ich brauche aber das er die Leerzeichen nicht mitzählt und trotzdem nicht mehr als 5 buchstaben eingegeben werden dürfen?


    Sonst könnte man sich die Funktion trim() ja gleich schenken

  • &quot;Sarkkan&quot; schrieb:

    Wie gesagt.. das ist so die reguläre Vorgehensweise.
    Ansonsten entfern doch einfach alle Leerzeichen, die zu viel sind?


    Wenn ich nur wüsste wie, es geht ja später darum das in einem Formularfeld der benutzer die Leerzeichen macht und nicht ich, und irgendwie entfernt trim zwar die leerzeichen aber er zählt auch die leerzeichen zwischen den wörtern, das soll ernicht tun. Sry bin Anfänger


    &quot;Sarkkan&quot; schrieb:


    Und tut mir Leid, dass es mir darum geht, dass du weißt was du machst und nicht nur einfach irgendeinen Unsinn schreibst und nicht verstehst, wieso es nicht klappt.


    Als erstes habe ich den Befehl verwechselt, das stimmt aber sonst weiß oder wüsste ich von Anfang an was ich machen wollte..


    Vielleicht ist mir die Umschreibung nicht ganz gelungen :oops:

  • &quot;22_111&quot; schrieb:


    Wenn ich nur wüsste wie, es geht ja später darum das in einem Formularfeld der benutzer die Leerzeichen macht und nicht ich, und irgendwie entfernt trim zwar die leerzeichen aber er zählt auch die leerzeichen zwischen den wörtern, das soll ernicht tun. Sry bin Anfänger


    Ich würde ganz einfach via str_replace() arbeiten und einfach 2 Leerzeichen durch eines ersetzen.

  • &quot;Sarkkan&quot; schrieb:


    Ich würde ganz einfach via str_replace() arbeiten und einfach 2 Leerzeichen durch eines ersetzen.


    check ich noch nicht, vielleicht bekomme ich es ja noch hin.


    Gehts so auch: <!-- m --><a class="postlink" href="http://www.schattenbaum.net/php/while.php">http://www.schattenbaum.net/php/while.php</a><!-- m -->


    Geht das denn überhaupt oder drücke ich mich imemr noch undeutlich aus, ich kriegs nicht hin :|

  • Japp, so würde es auch gehen, aber Reguläre Ausdrücke sind meistens etwas schwerer.
    Außerdem brauchen Sie länger.


    Mit str_replace suchen wir halt nach 2 Leerzeichen und ersetzten dieses durch nur noch eines.
    Dadurch das str_replace so lange arbeitet bis keine 2 Leerzeichen mehr gefunden werden muss im Endeffekt da nur noch eines stehen.

    Vielleicht verdeutlicht diese Skizze was da vorgeht^^

  • Nicht wirklich!!! Ich verstehe zwar was du meinst aber nicht wie


    1. Es soll in einem Formular vom Benutzer eine Nachricht eingegeben werden können
    2. Enthält diese viele 100 Leerzeichen und hat der Benutzer ohne Leerzeichen >= 10000 Zeichen dann Meldung ausgeben. Inhalt ist zu lang, ansonsten OK

  • Ich werde dir keinen kompletten Code schicken, nur das das noch einmal klar ist.
    Einzig werde ich dir sagen wie man vorgeht.


    • Benutzer gibt in deinem Formular eine Nachricht ein.
    • Du lässt die Nachricht mit meinem str_replace-Tipp durchlaufen, danach sind alle mehrfachen Leerzeichen ersetzt, den:
      Wenn wir 5 Leerzeichen haben und 2 davon in eines Umwandeln haben wir noch 4 Leerzeichen.
      Bei 4 Leerzeichen werden wieder 2 davon genommen und in eines umgewandelt => 3
      3 Leerzeichen haben immer noch 2 aufeinander folgende Leerzeichen die in eines umgewandelt werden => 2 Leerzeichen bleiben übrig
      2 Leerzeichen haben wir und 2 werden in eines umgewandelt, bleibt also noch 1 Leerzeichen an dieser Stelle
      1 Leerzeichen passt nicht mehr auf das Suchmuster, ergo schaut sich die Funktion den Rest des Strings an und verfährt genauso.
    • Wir lassen unseren bereinigten String zählen und Speichern diesen Wert in einer Variabeln.
    • Wir überprüfen ob der String größer wie 0 ist, anschließend ob er nicht größer wie unsere Maximale Stringlänge
    • Wenn beides zutrifft verfahren wir weiter, also speichern den String ab oder sonstiges. Ansonsten bekommt der Benutzer eine Fehlermeldung.
  • So:



    Wieso geht das nicht?

  • Naja.. ich wüsste nicht genau, was daran nicht klappen soll? :D
    Den Großteil deines Skriptes hast du ja schon. Dieses musst du nun einfach durch meine Stelle ergänzen :D
    Dafür musst du einfach nur schauen welcher Parameter was ist und meine schöne Umschreibung da reinhauen xD
    In deinem Fall wäre das also für die Funktion str_replace

    &quot;http://de2.php.net/manual/de/function.str-replace.php&quot; schrieb:

    str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

    $search || Wir suchen nach?
    $replace || Es soll ersetzt werden durch?
    $subject || In welchem String?


    Dann gönne dir mal eine Pause?^^
    Wenn der Kopf dicht macht, hat es einfach keinen Sinn mehr, weil man dann viele sehr dumme Fehler macht.
    Macht man dann trotzdem weiter ärgert man sich meistens dann später, wenn man wieder aufnahmefähig ist, da man viel Scheiße verzapft hat.

  • ahhhhhhhhhhhhhh, Danke dir für die deutsche Begriffserklärung:


    Sooo klappt es glaube ich:



    Hey es klappt noch nicht ganz, aber soweit ist es doch richtig? ODER?