2010-12-10 4 views
4

Je cherche un moyen de dépouiller tous les tags d'ancrage aussi je veux tout de ',' à <br> à supprimer mais <br> devrait rester thr.PHP: regexp et tags spécifiques striping

entrée sale:

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> 

il devrait être comme:

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

s'il vous plaît aider!

- Voici le texte sale:

$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

première ligne à lire en tant que: Je cherche un moyen de dépouiller tous les tags d'ancrage aussi je veux tout de «,» à linebreak tag à être enlevé, mais le saut de ligne devrait rester thr. – ehmad11

+0

n'est pas une autre façon sans utiliser HTML Purifier? ! – ehmad11

+0

Essayez ma réponse et voyez si cela fonctionne pour vous. – BoltClock

Répondre

1

Normalement, il est mauvais d'utiliser regex pour traiter les chaînes HTML, mais en supposant que tous vos liens sont formés comme ça alors à l'aide preg_replace()ne devrait pas poser des problèmes. Essayez cette

// 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); 

Pour les autres réponses suggérant strip_tags(): il ne sera pas effacer le texte contenu par une paire de balises HTML que lamelles. Par exemple

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

devient

Accountant NP 

qui est pas tout à fait ce que l'OP veut.

+0

il ignore tous les br jusqu'à la fin qui ne souhaite pas .. votre code donne cette sortie: Abstractor HLTH compte représentant ignorant « comptable » parce que son entre « » et le dernier br @ – ehmad11

+0

ehmad1: Voulez-vous dire les trois lignes sont dans une seule chaîne? – BoltClock

+0

oui toutes les lignes sont dans une seule chaîne – ehmad11

0

strip-tags() pour les balises, str_replace() avec strpos() pour l'autre chose.

+0

strip_tags ** ONLY ** permettre à certaines étiquettes de rester, mais OP veulent inverser la voie – ajreal

+0

Oh, oui, à droite. Laissez la réponse de toute façon, peut-être que quelqu'un s'y intéresse. – KingCrunch

1

Je conseille vivement l'utilisation HTML Purifierhttp://htmlpurifier.org/

Il est assez simple à mettre en place, a une excellente réputation et extrêmement puissant.

0

HTML Purifier est votre ami. Il a des options flexibles, et est très sophistiqué. Faire de telles choses avec str_replace ou des expressions régulières est mauvais.

+0

Je n'ai pas downvote, mais pourquoi y at-il un upvote pour une réponse HTML Purifier et une downvote pour celui-ci? – BoltClock

+0

Upvoting pour contrer le downvote. – BoltClock

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

Ceci supprimera tout sauf les étiquettes br. Comme KingCrunch dit, str_replace et strpos pour le reste.

0

strip_tags a un deuxième argument qui vous permet de fournir une chaîne de balises autorisées. Il dépouillera tous les tags sauf ceux que vous fournissez:

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