2 Stimmen

Einfügen von Leerzeichen zwischen UTF8-Wörtern - was stimmt mit meinen 2 einfachen Regexes nicht?

Ich habe eine Webseite, auf der Benutzer Kommentare in russischer Sprache (UTF-8) hinterlassen können, so wie diesen:

,  , !!()

Einige Benutzer "missbrauchen" es zu Unterhaltungszwecken, indem sie die Leerzeichen zwischen den Wörtern auslassen

,,, ,, ,,,,!

was zu sehr breiten HTML-Tabellenzeilen führt und mein Layout zerstört.

Ich versuche, diesen Benutzern entgegenzuwirken, indem ich versuche, Kommentare mit über 60 Nicht-Leerzeichen-Zeichen zu finden und nach Satzzeichen (wie Kommas) ein Leerzeichen einzufügen - mit diesem PHP-Code:

            if (preg_match('/\S{60,}/u', $about) == 1) {
                    error_log('Kommentar aufteilen: ' . $about);
                    $about = preg_replace('/(\p{P}+\s*)/u', '$1 ', $about);
                    error_log('===Ergebnis Kommentar: ' . $about);
            }

Dies funktioniert jedoch nicht und hat mindestens 2 Probleme

  1. Jeder Kommentar wird abgeglichen, auch kurze wie oben
  2. Das \s* ist nicht gierig und "Komma und Leerzeichen" wird aus irgendeinem seltsamen Grund durch "Komma Leerzeichen Leerzeichen" ersetzt

Hier ein Auszug aus meiner Protokolldatei:

[04-Jun-2012 09:50:10] Kommentar aufteilen: ,  , !!()
[04-Jun-2012 09:50:10] ===Ergebnis Kommentar: ,   ,  ! !( )

[04-Jun-2012 09:50:10] Kommentar aufteilen: ,,,
,, ,,,,!(nusja)
[04-Jun-2012 09:50:10] ===Ergebnis Kommentar: , , ,
 , ,  , , , , !( nusja)

Ich habe versucht, die Backslashes zu verdoppeln - das hat nichts geändert.

Ich verwende das Standard-PHP mit dem neuesten CentOS Linux 5.x und 6.x:

# php -v
PHP 5.3.3 (cli) (built: May  7 2012 17:58:11)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

3voto

Pateman Punkte 2607

Versuchen Sie wordwrap(). Es ist eine integrierte Funktion und ich denke, dass es Ihnen helfen sollte.

Wenn Sie nach einer Regexp-Lösung suchen, gibt es eine in den Kommentaren - schauen Sie hier. Es ist UTF-8-sicher, also sollte es für Ihre russische Website funktionieren.

1voto

Waut Punkte 11

Sie könnten den Kommentar in einem Span- oder Div-Element platzieren.

Und fügen Sie die folgende Definition in Ihre CSS-Datei ein:

span.comment
{
    max-width: 300px;
    overflow: hidden;
}

Dadurch wird einfach alles ausgeblendet, das größer ist als beabsichtigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X