Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the href (url) in a link (a) element?

Here is my full link.

<a href="http://localhost/mysite/client-portal/">Client Portal</a>

I want above link to look like following.

<a href="#popup">Client Portal</a>

I really don't know how to work with preg_replace to get this done.

preg_replace('\/localhost\/mysite\/client-portal\/', '#popup', $output)
like image 814
Abdul Shakoor Kakar Avatar asked Nov 05 '25 02:11

Abdul Shakoor Kakar


1 Answers

If is only this link you can achieve your goal with str_replace():

<?php

$link = '<a href="http://localhost/mysite/client-portal/">Client Portal</a>';
$href = 'http://localhost/mysite/client-portal/';
$new_href = '#popup';

$new_link = str_replace($href, $new_href, $link);

echo $new_link;

?>

Output:

<a href="#popup">Client Portal</a>

If you want you can use DOM:

<?php

$link = '<a href="http://localhost/mysite/client-portal/">Client Portal</a>';
$new_href = '#popup';

$doc = new DOMDocument;
$doc->loadHTML($link);

foreach ($doc->getElementsByTagName('a') as $link) {
   $link->setAttribute('href', $new_href);
}

echo $doc->saveHTML();

?>

Output:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><a href="#popup">Client Portal</a></body></html>

Or you can use preg_replace() like this:

<?php

$link = '<a href="http://localhost/mysite/client-portal/">Client Portal</a>';
$new_href = '#popup';

$regex = "((https?|ftp)\:\/\/)?"; // SCHEME
$regex .= "(localhost)"; // Host or IP
$regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path

$pattern = "/$regex/";

$newContent = preg_replace($pattern, $new_href, $link);
echo $newContent;

?>

Output:

<a href="#popup">Client Portal</a>
like image 180
Adrian Cid Almaguer Avatar answered Nov 08 '25 01:11

Adrian Cid Almaguer