Search code examples
phphtml-parsingconvertersbbcode

PHP - pregreplace url


i am trying to use preg_replace on a url to an image in HTML format, and turn it into BBCode.

From: <img src="http://website.com/char/sign/Name+Surname.png">

To: [sign]Name+Surname[/sign]

Note: the filename of the png file can be just Name, it can contain a middle name like: Name+Middlename+Surname, it can also contain - and %2527 like Carl-Philips or Bob+Mc%2527Donalds

So this is what I've tried so far, but it's not doing anything. What am I doing wrong?

$source = array(
    '#\<img src=\"http\:\/\/website.com\/char\/sign\/\>(.+).png\>#isU'
);

$new = array(
    '[sign]$1[/sign]'
);

$text = preg_replace($source, $new, $text);

Solution

  • You should use a parser (How do you parse and process HTML/XML in PHP?) for these in the future. You have a few typos in your regex.

    This should accomplish what you are after:

    /<img src="http:\/\/website\.com\/char\/sign\/(.+?)\.png">/
    

    Demo (with exmplanation of regex): https://regex101.com/r/sT6aG9/1

    PHP Example:

    $source = '/<img src="http:\/\/website\.com\/char\/sign\/(.+?)\.png">/';
    $new = '[sign]$1[/sign]';
    $text = '<img src="http://website.com/char/sign/Name+Surname.png">, <img src="http://website.com/char/sign/Bob-Robinson.png">, <img src="http://website.com/char/sign/Michael%2527Ross.png">';
    $text = preg_replace($source, $new, $text);
    echo $text;
    

    Output:

    [sign]Name+Surname[/sign], [sign]Bob-Robinson[/sign], [sign]Michael%2527Ross[/sign]
    

    PHP Demo: http://3v4l.org/WC5oJ