Замените указанные теги c в содержимом html новыми значениями с помощью preg_replace_callback - PullRequest
0 голосов
/ 20 июня 2020

Прошу прощения, если уже есть несколько сообщений с той же проблемой, однако я все перепробовал и все еще не могу найти, что кажется проблемой с моим кодом.

Итак, что я хочу заключается в замене содержимого атрибута sr c моим собственным. Например, скажем, у меня есть документ HTML вроде этого:

<div>
    <p>Hello</p>
    <img src="123">
    <p>
        <img src="abc123">
    </p>
    <h1>Title</h1>
    <img src="w?ijais,cn,a;;sqikxiasassaswxzdvfrfr...">
</div>

Я хочу найти каждый тег изображения, удалить значение sr c, выполнить некоторый синтаксический анализ, а затем заменить его другим стоимость. Вот мой код PHP со случайным logi c для простоты:

//The HTML content
$content = "<div><p>Hello</p>...";

//A number I want to use to modify the src values
$id = 9;

//Starts with <img src=" and ends with "/> with any number of characters in the middle
//I escape the double quotes: \"
$pattern = "/<img src=\"(.*)\">/";

//Calling preg_replace_callback
$result = preg_replace_callback($pattern, function($matches) use($id){
    changeImage($matches[0], $id);
}, $content);

echo $result;
//changeImage function
public function changeImage($image, $id){
    //Stripping the src value
    $img = str_replace("<img src=\"", "", $image);
    $img = str_replace("\">", "", $img);
    //Modifying the src value
    $img = $id . "-" . $img[0] . $img[1];
    //Putting back the tags
    $img = "<img src=\"$img\">";
    return $img;
}

Результат должен быть:

 <div>
    <p>Hello</p>
    <img src="9-12">
    <p>
        <img src="9-ab">
    </p>
    <h1>Title</h1>
    <img src="9-w?">
</div>

Вот что я получаю:

<div>
    <p>Hello</p>

    <p>
    
    </p>
    <h1>Title</h1>

</div>

1 Ответ

1 голос
/ 20 июня 2020

Вам нужно вернуть строку, которую вы хотите заменить, поэтому от этого:

$result = preg_replace_callback($pattern, function($matches) use($id){
    changeImage($matches[0], $id);
}, $content);

до этого:

$result = preg_replace_callback($pattern, function($matches) use($id){
    return changeImage($matches[0], $id);
}, $content);

EDIT: предлагается использовать /<img[^>]*>/ как REGEX для соответствия тегу img

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...