2010-11-21 6 views
1

J'ai un script PHP qui analyse le contenu POST d'un formulaire (message) et transforme toute URL dans un lien HTML réel. Ce sont les 2 expressions régulières que j'utilise:PHP Reg ex pour analyser un lien

$dbQueryList['sb_message'] = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $dbQueryList['sb_message']); 

$dbQueryList['sb_message'] = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $dbQueryList['sb_message']); 

Ok il fonctionne bien, mais maintenant, dans un autre script que je voudrais faire le contraire. Donc dans mon $dbQueryList['sb_message'] je pourrais avoir un lien comme ceci "<a href="http://google.com" target="_blank">Google</a>" et je voudrais juste avoir "http://google.com".

Je ne peux pas écrire la regex qui peut le faire. Pourrais-tu m'aider s'il te plait? Merci de

Répondre

1

Quelque chose comme ça, je pense:

echo preg_replace('/<a href="([^"]*)([^<\/]*)<\/a>/i', "$1", 'moofoo <a href="http://google.com" target="_blank"> Google </a> helloworld'); 
1

Il est plus sûr d'utiliser DOMDocument au lieu de regex pour analyser le contenu HTML.

Essayez ce code:

<?php 

function extractAnchors($html) 
{ 
    $dom = new DOMDocument(); 
    // loadHtml() needs mb_convert_encoding() to work well with UTF-8 encoding 
    $dom->loadHtml(mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8")); 

    $xpath = new DOMXPath($dom); 

    foreach ($xpath->query('//a') as $node) 
    { 
     if ($node->hasAttribute('href')) 
     { 
      $newNode = $dom->createDocumentFragment(); 
      $newNode->appendXML($node->getAttribute('href')); 
      $node->parentNode->replaceChild($newNode, $node); 
     } 
    } 

    // get only the body tag with its contents, then trim the body tag itself to get only the original content 
    return mb_substr($dom->saveXML($xpath->query('//body')->item(0)), 6, -7, "UTF-8"); 
} 

$html = 'Some text <a href="http://www.google.com">Google</a> some text <img src="http://dontextract.it" alt="alt"> some text.'; 
echo extractAnchors($html); 
Questions connexes