Mehrere Leerzeichen im String mit   ersetzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mehrere Leerzeichen im String mit   ersetzen

    Guten Morgen!


    Folgende Situation: Es gibt ein Textfeld in dem Benutzer ihre Texte eintragen, relativ simpel. Jetzt wollte ich aber, dass das Textfeld auch mehrere Leerzeichen akzeptiert und lasse einfach alle Leerzeichen mittels str_replace() als   speichern. Das führt jetzt aber dazu, dass die Zeilen nicht mehr bei der Breite der Seite aufhören und weitergehen weil der Browser die Zeile als zusammenhängenden Wort sieht.

    Was ich möchte: Alle normalen Leerzeichen sollen auch Leerzeichen bleiben, alles was aber mehr als ein Leerzeichen hat soll aber durch die jeweilige Anzahl an   ersetzt werden. Wie schaffe ich das?

    Danke,
    ZyloX
    Zuletzt geändert von zylox; 14.09.2007, 08:53.

  • #2
    Und wieso unbedingt & nbsp; ? Könntest ja einfach auch alle mehrfachen Leerzeichen mit einem ersetzen z.B.
    PHP-Code:
    $str preg_replace('/\\s\\s+/'' '$str); 
    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Original geschrieben von jahlives
      [B]Und wieso unbedingt   ? Könntest ja einfach auch alle mehrfachen Leerzeichen mit einem ersetzen z.B.
      Nein das geht nicht. Weil ja mehr als ein Leerzeichen auch dargestellt werden soll, wenn denn mehr als ein Leerzeichen eingegeben wurde. Der Browser stellt bekanntlich nur ein Leerzeichen dar, daher müssen die sonstigen Leerzeichen mit   ersetzt werden.

      Wie dem auch sei, folgendes funktioniert:

      PHP-Code:
      $str preg_replace('~( {2,})~e'"str_replace(' ',' ','\\1')"$str); 
      Problem ist also behoben.

      Aber danke trotzdem.

      Grüße,
      ZyloX

      Kommentar


      • #4
        Du kennst das <pre>-Tag??

        Kommentar


        • #5
          Original geschrieben von PHP-Desaster
          Du kennst das <pre>-Tag??
          Klar, wollte es nur nicht damit lösen sondern einen eigenen Weg beschreiten.

          Kommentar


          • #6
            Original geschrieben von PHP-Desaster
            Du kennst das <pre>-Tag??
            Nachdem er lange Zeilen umgebrochen haben möchte, ist das der falsche Weg~

            Brauchbar wäre in diesem Fall white-spacere-wrap, aber das kann natürlich wieder kein Browser...
            http://www.css4you.de/Texteigenschaf...ite-space.html

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              preg_replace mit modifier e ist böse. damit kann man dir schön php-code unterjubeln.
              außerdem auch garnicht notwendig, preg_replace kannst du ja gleich mit & nbsp füttern und nicht noch den umständlichen weg über str_replace gehen.

              Kommentar


              • #8
                preg_replace kannst du ja gleich mit & nbsp füttern und nicht noch den umständlichen weg über str_replace gehen
                Stimmt, Problem ist nur das wirklich jedes Leerzeichen ersetzt werden soll, ein Regex mit Lookaround würde da wohl helfen. ([COLOR=crimson]Edit:[/COLOR] Beispiel)
                Zuletzt geändert von tontechniker; 14.09.2007, 23:21.
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  Original geschrieben von tontechniker
                  Stimmt, Problem ist nur das wirklich jedes Leerzeichen ersetzt werden soll, ein Regex mit Lookaround würde da wohl helfen. ([COLOR=crimson]Edit:[/COLOR] Beispiel)
                  wenn jedes leerzeichen ersetzt werden soll, kann man auch ebensogut str_replace verwenden, oder habe ich jetzt etwas nicht verstanden?

                  dein $pattern = '/( )(?= )/is'; ist Lookaround?
                  sorry für die blöde frage, aber mir sagt Lookaround wirklich nichts, auch wenn das schlagwort schon öfter in diesem forum gefallen ist.
                  '/\s\s+/' ist da schon einfacherer, wobei whitespaces nicht unbedingt leerzeichen sein müssen.

                  Kommentar


                  • #10
                    Original geschrieben von 3DMax
                    wenn jedes leerzeichen ersetzt werden soll, kann man auch ebensogut str_replace verwenden, oder habe ich jetzt etwas nicht verstanden?
                    Es soll jedes Leerzeichen ersetzt werden - sofern mehr als 2 nacheinander vorhanden sind - ansonsten keines!

                    dein $pattern = '/( )(?= )/is'; ist Lookaround?
                    sorry für die blöde frage, aber mir sagt Lookaround wirklich nichts, auch wenn das schlagwort schon öfter in diesem forum gefallen ist.
                    '/\s\s+/' ist da schon einfacherer, wobei whitespaces nicht unbedingt leerzeichen sein müssen.
                    Das ganze nennt sich (zuminder in der PHP-Welt) nicht Lookaround, sondern Assertion - in diesem Fall eine positive lookahead Assertion. Gematched wird jedes Leerzeichen, hinter welchem noch eines folgt - deshalb wird das letzte Leerzeichen auch nicht ersetzt

                    Die Frage ist halt was genau der TO haben will ... die Assertion ist eine schnelle Variante, weil sie per Regex abläuft, statt per callback/eval - nur ersetzt halt nicht alle Leerzeichen.

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Die Frage ist halt was genau der TO haben will ... die Assertion ist eine schnelle Variante, weil sie per Regex abläuft, statt per callback/eval - nur ersetzt halt nicht alle Leerzeichen.
                      Wahr nur ein schneller Versuch - im Prinzip müsste man noch & nbsp; vor dem Leerzeichen matchen, die sind allerdings nicht immer da und ein positive Lookahead Assertion darf soweit ich weiß keine Variable länge haben. ([COLOR=crimson]Edit:[/COLOR] matched fast alles)
                      Zuletzt geändert von tontechniker; 15.09.2007, 16:44.
                      Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                      Kommentar


                      • #12
                        Leider funktionieren die Links zu dem RegExp-Evaluator nicht mehr, deswegen hab ich mich mal mit den Assertions beschäftigt (speziell mit den Positive Lookbehind-Assertions) und bin zu diesem Ergebnis gekommen:

                        PHP-Code:
                        preg_replace("#\\s(?<=\\s )#","&nbsp;",$text); 
                        Die Funktion ersetzt alle Leerzeichen, die nach einem Leerzeichen folgen mit
                        PHP-Code:
                        &nbsp

                        Kommentar

                        Lädt...
                        X