2016-06-29 4 views
1

Ich versuche, etwas wie Desinfektion Artikel Funktion zu erstellen. Ich meine eine Funktion, die Inhalt von Artikeln reinigt oder normalisiert, die in HTML-Blog-Sites angezeigt werden.bleiben Leerzeichen und Newline-Zeichen während der Artikel-Bereinigung

Es muss alle Leerräume außer \n und entfernt werden. Also Newline und Platz.

Ich begann eine Idee, Zeilenumbrüche und Leerzeichen von addcslashes PHP-Funktion zu kodieren. Entfernen Sie dann alle Leerzeichen. Dann benutze stripslashes. Dann ersetzen Sie mehrere \x20 Vorkommen durch einzelne. Es wäre also etwas wie Newline Chars und Leerzeichen temporären Winterschlaf für Regex-Betrieb.

Aber ich war nicht erfolgreich, weil die Ausgabe kein Zeilenumbruch char hat, das in der Eingabe existiert.

Online Version https://ideone.com/I4oZCJ

Mein Code, der nicht funktioniert:

<?php 
    $text = 'first line 
second line'; 
    $text = addcslashes($text, "\x20\t"); 
    $text = preg_replace('/\s+/', ' ', $text); 
    $text = stripslashes($text); 
    $text = preg_replace('/\s+/', ' ', $text); 
    var_dump($text); 

Wie es zu bekommen?

Danke

Antwort

1

Sie können die horizontalen Leerzeichen mit der \h Klasse ersetzen:

preg_replace('/\h+/', ' ', $text'); 

Demo

Alternativ können Sie eine Zeichenklasse eigene erstellen, ohne alle Zeichen nicht möchten ersetzen:

preg_replace('/[^\S\n]+/', ' ', $text); 

Dies entspricht im Prinzip allen Chactern, die NICHT \S (Nicht-Whitespace) sind und nicht \n (keine Newline-Zeichen). Beide arbeiten.

+0

benutzte ich diese Muster. Der CR-Leerraum, ich meine '\ r ', wurde durch den Raum ersetzt. Es hätte entfernt werden sollen. Sie können es online sehen: https://ideone.com/ebP1Q4 – trzczy

+0

@trzczy Aufruf 'str_replace (" \ r ", '', $ Text)' zuerst dann entfernen Sie die Zeichen, die Sie so schnell und einfach entfernen möchten wie möglich –

+0

Aber "\ r" ist nicht der einzige vertikale Leerzeichen, den "\ h" ignoriert. Der Filter sollte "jedes \ s außer Raum und \ n" sein. Die Untersuchung soll einen Artikel unsichtbar machen, damit sichtbare Zeichen gezählt werden können. – trzczy

0

https://ideone.com/hJrH8R

<?php 
function clean($text) { 
    $text = preg_replace('/[\cK\f\r\x85]+/', '', $text); 
    $text = preg_replace('/\h+/', ' ', $text); 
    return $text; 
} 
Verwandte Themen