2010-12-10 16 views
4

Ich bin auf der Suche nach einer Möglichkeit, alle Anker Tags auch ich möchte alles von ',' zu <br> entfernt werden, aber <br> sollte Thr bleiben.PHP: Regexp und spezifische Tags Stripping

schmutzig Eingang:

Abstractor HLTH<br> 
Account Representative, Major <a href="#P">P</a><br> 
Accountant <a href="#NP">NP</a>, <a href="#M">M</a>, <a href="#REA">REA</a>, <a href="#SKI">SKI</a><br> 

es sein sollte:

Abstractor HLTH<br> 
Account Representative<br> 
Accountant <br> 

bitte helfen!

- finden Sie das schmutzige Text:

$str = sprintf(' 

Abstractor HLTH<br> 
Account Representative, Major <a href="#P">P</a><br> 

Accountant <a href="#NP">NP</a>, <a href="#M">M</a>, <a href="#REA">REA</a>, <a href="#SKI">SKI</a><br> 
Accountant, Cost I & II (See Cost Accountant I, II) <a href="#FR">FR</a><br> 
Accountant, General <a href="#G">G</a><br> 
Accountant, General I (Junior) (See General Accountant) <a href="#FR">FR</a>, <a href="#O/G">O/G</a>, <a href="#W">W</a><br> 

Accountant, General II (Intermediate) (See General Accountant) <a href="#FR">FR</a>, <a href="#O/G">O/G</a>, <a href="#W">W</a>, <a href="#HA">HA</a> <br> 
Accountant, General III (Senior) (See General Accountant) <a href="#FR">FR</a>, <a href="#O/G">O/G</a>, <a href="#W">W</a> <br> 

'); 
+0

erste Zeile zu lesen als: Ich bin auf der Suche nach einer Möglichkeit, alle Anker Tags zu entfernen, auch ich will alles von ',' Linebreak Tag entfernt werden, aber Zeilenumbruch sollte Thr bleiben. – ehmad11

+0

ist kein anderer Weg ohne HTML Purifier? ! – ehmad11

+0

Versuchen Sie meine Antwort und sehen Sie, ob es für Sie funktioniert. – BoltClock

Antwort

1

Normalerweise ist es schlecht Regex zu verwenden, um mit HTML-Strings zu beschäftigen, aber unter der Annahme, alle Links gebildet werden wie das dann mit preg_replace()sollte nicht Probleme aufwerfen. Versuchen Sie, diese

// Removes all links 
$str = preg_replace("/<a href=\"#([A-Z\\/]+?)\">\\1<\\/a>(?:,)?/i", "", $str); 

// Strip the comma and everything from the comma 
// to the next <br> in the line 
$str = preg_replace("/,(.*?)(?=<br>)/i", "", $str); 

Zu den weiteren Antworten darauf hindeutet, strip_tags(): Es wird nicht Text durch ein Paar von HTML-Tags enthalten löschen, die es Streifen. Zum Beispiel

Accountant <a href="#NP">NP</a> 

wird

Accountant NP 

die nicht ganz ist, was der OP will.

+0

es jedes br bis Ende ignoriert was nicht erwünscht ist .. Code gibt diese Ausgabe: Abstractor HLTH Konto Vertreter ‚Accountant‘, weil sein zwischen „“ und dem letzten br – ehmad11

+0

@ ehmad1 ignorieren: Meinen Sie alle drei Zeilen sind in einer einzigen Zeichenfolge? – BoltClock

+0

ja alle Zeilen sind in einer einzigen Zeichenfolge – ehmad11

1

würde ich dringend raten HTML Purifier mithttp://htmlpurifier.org/

Es ist ziemlich einfach einzurichten, hat einen ausgezeichneten Ruf und extrem leistungsfähig.

0

HTML Purifier ist dein Freund. Es hat flexible Optionen und ist sehr anspruchsvoll. Solche Dinge mit str_replace oder regulären Ausdrücken zu tun ist falsch.

+0

Ich habe nicht downvote, aber warum gibt es ein upvote für eine HTML-Purifier-Antwort und ein Downvote für dieses? – BoltClock

+0

Upvoting gegen den Downvote. – BoltClock

0
$clean_string = strip_tags($original_string, '<br>'); 

Dies wird alles außer BR-Tags entfernen.

Wie KingCrunch sagt, str_replace und strpos für den Rest.

0

strip_tags verfügt über ein zweites Argument, mit dem Sie eine Zeichenfolge zulässiger Tags angeben können. Es werden alle Tags außer denen Streifen Sie liefern:

$string = strip_tags($string, '<br>'); // will leave <br>-tags in place