Leerzeichen irritieren strlen()


  • Wieso funktioniert das Script?

  • 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
    <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

  • Zitat von &quot;Basiii&quot;

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


    :wink:

    Zitat von &quot;Basiii&quot;

    Noch ein Tipp: Was du brauchst ist strlen


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


    Zeigt OK an..

  • PHP
    <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?

  • Zitat von &quot;Sarkkan&quot;

    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

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


    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.

  • Zitat von &quot;Sarkkan&quot;

    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


    Zitat von &quot;Sarkkan&quot;


    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:

  • Zitat von &quot;22_111&quot;


    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.

  • 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?

  • ok ich lass es weg :P Was soll ich denn machen wenn es nicht klappt, und so wie es bei php.net steht. so geschwollen redest du ja auch. Daher raff ich es gerade nicht. Liegt vielleicht auch daran das ich schon fast 20 Stunden am tun bin :P

  • 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

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

    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?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!