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
- Jeder Kommentar wird abgeglichen, auch kurze wie oben
- 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