Je dois supprimer des étiquettes d'ancrage de certains textos et ne peut pas sembler être capable de le faire à l'aide de Regex.
Juste les balises d'ancrage, pas leur contenu.
Par exemple, Google code> deviendrait Google code>. p>
7 Réponses :
Vous recherchez strip_tags () code> .
<?php
// outputs 'google'
echo strip_tags('<a href="http://www.google.com/" target="_blank">google</a>');
J'ai besoin de conserver d'autres tags, je n'ai besoin que de retirer les ancres.
@Lior ah, je vois. strip_tags code> ne fait effectivement pas cela. Il existe une implémentation dans l'utilisateur des notes contribuées qui peuvent vous aider: PHP. Net / Manuel / FR / Fonction.Strip-Tags.php # 100054
@Pekka Vous pouvez transmettre un deuxième argument à strip_tags () code> c'est une chaîne d'une chaîne de "Abedable_Tags": php.net/manual/fr/funck.strip-tags.php .
@Jasper mais cela ne vous aidera pas ici, n'est-ce pas? Il devrait spécifier toutes les balises existantes dans $ Abedable_tags code>
@Pekka Il est regrettable que vous ayez à la liste noire plutôt que de pouvoir être capable de savoir quelles étiquettes que vous souhaitez supprimer mais que vous utilisez une connaissance de ce type de contenu est analysée, vous pouvez probablement obtenir cette liste noire dans une petite liste.
Utilisation de Regex: P>
preg_replace ('/ ] +> ([^ <] +) <\ / a> / i' ',' \ 1 ', $ html); code> p >
Et s'il existe un code> dans les éléments d'ancrage?
alors vous pouvez essayer je l'ai essayé en ligne ici sur Rubular p> p>
Ce n'est pas correct, car il dépendrait également d'autres balises commençant par un article ou une adresse similaire.
Peut-être une meilleure regex: prg_replace ('/ <\ s * \ /? \ s a (?: \ s * | \ s + [^>] i>)> /', '', $ vars [ 'panes']);
@ CSᵠ Réponse est préférable pour éliminer le texte moyen des balises 'A'
Essayez avec:
Exactement, il ne peut pas être fait correctement en utilisant une expression régulière.
Voici un exemple en utilisant DOM: p>
$xml = new DOMDocument();
$xml->loadHTML($html);
$links = $xml->getElementsByTagName('a');
//Loop through each <a> tags and replace them by their text content
for ($i = $links->length - 1; $i >= 0; $i--) {
$linkNode = $links->item($i);
$lnkText = $linkNode->textContent;
$newTxtNode = $xml->createTextNode($lnkText);
$linkNode->parentNode->replaceChild($newTxtNode, $linkNode);
}
Belle réponse mais comment puis-je l'utiliser? .. Pas vraiment clair sur l'utilisation. Est-ce que je viens de faire écho $ NEWTXTNODE? ou lnktext ???
@VyRenMedia OP a demandé comment remplacer les liens par leur contenu texte. Ainsi, à la fin de cette boucle, vous avez un objet DOMDocument CODE> sans liens. Vous pouvez utiliser $ xml-> sauvegardehtml (); code> pour obtenir tout le résultat HTML. $ lnktext contient le texte de la liaison actuelle en tant que chaîne, et vous souhaiterez peut-être GARM .
Merci beaucoup pour votre réponse @ Yann-Milin, j'ai toutefois trouvé une solution de regex pour ce problème.
Voir ci-dessous pour l'expression régulière, la déclaration " elle ne peut pas être faite correctement en utilisant une expression régulière i>". semble ne pas être vrai.
Ce que j'essayais de dire, c'est que toute solution d'expression régulière pour cela n'est pas une bonne solution. Vous êtes évidemment peut I> exécuter une requête d'expression régulière contre le texte HTML, mais cela ne signifie pas que vous devrait i> :) lire intéressant sur le sujet:
Cette question a déjà été répondue mais je pensais ajouter ma solution au mélange. J'aime mieux que la solution acceptée parce que c'est un peu plus au point.
$content =
preg_replace(array('"<a href(.*?)>"', '"</a>"'), array('',''), $content);
C'est bien et simple, peut également utiliser $ Content = Preg_replace (tableau ('"" "",' "" '), Array (' ',') , $ de contenu); code> au cas où "href" n'est pas le premier attribut de l'étiquette d'ancrage.
@Davidthomas Super addition!
Une grande partie de la regex ici ne m'a pas aidé. Certaines d'entre elles éliminent le contenu à l'intérieur de l'ancre (ce qui n'est pas du tout ce que OP a demandé) et non tout le contenu de cela, une partie correspondant à n'importe quelle balise commençant par un, etc.
C'est ce que j'ai créé pour mes besoins au travail. Nous avons eu un problème dans lequel le passage de HTML sur WKHTMLTOPDF qui avait des balises d'ancrage (avec de nombreux attributs de données et d'autres attributs) empêcherait parfois le PDF de produire, donc je voulais supprimer ceux tout en conservant le texte. P>
Regex: P>
/ ? A ([^>] *)?> / ig p> blockQuote>
en php, vous pouvez faire: p>
xxx pré> sorties: p>
xxx pré> p>