Jump to content

Swaping links


xionhack

Recommended Posts

Hello. I have a questions that I think its pretty much about regular expresions. I have this code:

 

function create_link($matches) {
  // link_id should be an auto-increment field
  $insert = mysql_query(sprintf("INSERT INTO links ( link_url ) VALUES ( '%s' )", $matches[1]));
  
  return '<a href="' . mysql_insert_id() .'">'. $matches[2] .'</a>';
}

// File name, could be a url
$file = 'file.html';

if (file_exists($file)) {
  $content = file_get_contents($file);
  
  // Regex replace string
  $pattern = '/<a href="([^"]+)">([^<]+)<\/a>/s';
  $content = preg_replace_callback($pattern, 'create_link', $content);

  echo $content;
}

 

What that does, is that it checks for all the links in a page, saves the links in a database and then swap the link address with the id of that link in the database. The problem that i have is that the code works when the link is just "<a href="" ></a>" but if the <a> tag has an attribute, then it wont work. i.e <a href="" id=""></a> OR <a id="" title="" href=""></a>

Link to comment
https://forums.phpfreaks.com/topic/208415-swaping-links/
Share on other sites

function create_link($matches) {
  // link_id should be an auto-increment field
  $insert = mysql_query(sprintf("INSERT INTO links ( link_url ) VALUES ( '%s' )", $matches[1]));
  
  return '<a' . $matches[1].'href="' . mysql_insert_id() .'"' . $matches[3] . '>' . $matches[4] .'</a>';
}

// File name, could be a url
$file = 'file.html';
if (file_exists($file)) {
  $content = file_get_contents($file);
  
  // Regex replace string
  $pattern = '/<a([^>]*)href="([^"]+)"([^>]*)>([^<]+)<\/a>/s';
  $content = preg_replace_callback($pattern, 'create_link', $content);

  echo $content;
}

Link to comment
https://forums.phpfreaks.com/topic/208415-swaping-links/#findComment-1089399
Share on other sites

Hi! thank you! it works well! except for something. It doesnt want to take some links that are long like :

 

http://www.facebook.com/album.php?aid=8228&id=680439301#!/pages/test/test-test/162482691457?v=wall

 

Also, I dont want to get the mailto: tags but just leave them as mailto: . I was trying the following regular expression and code but its not working either, its not taking the attribute tags nor the mailto, I find regex so complicated!:

 

$pattern = '%<a (??!href)[^>])*+href\s*+=\s*+"([^"]+)"[^>]*+>([^<]*+(??!</a>)<[^<]*+)*+)</a>%';

Link to comment
https://forums.phpfreaks.com/topic/208415-swaping-links/#findComment-1089594
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.