za4me
@za4me
Человек

Модификация или улучшение данного кода?

Дано: выбрать все ссылки из строки, текст ссылки заменить на путь, перед ссылкой добавить текст ссылки. Ссылок может быть любое количество.

Решение:
// искомая строка
$str = "Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться.
<a href=\"http://example1.com/\">Какой-то текст ссылки1</a>Lorem Ipsum используют потому, 
что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное
 распределение букв и пробелов в абзацах, <a href=\"http://example2.com/\">Какой-то текст ссылки2</a> 
которое не получается при простой дубликации.
<a href=\"http://example3.com/\">Какой-то текст ссылки3</a> 
Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться. 
Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, 
а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации.";

// получение всех ссылок
$reg = '/<a[^>]+href="([^ >]+)">(.*?)<\/a>/';
preg_match_all($reg, $str, $arr);

// замена текста на путь
$text_way = str_replace($arr['2'], $arr['1'], $arr['0']);

// добавление текста перед ссылкой
$text_a = array_map(function($f, $s){return "$f $s";}, $arr['2'], $text_way);

// замена ссылок в строке
$str = str_replace($arr['0'], $text_a, $str);

echo $str;

Может быть есть более простое решение данной задачи?
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 2
muhammad_97
@muhammad_97
PHP-разработчик
https://github.com/Imangazaliev/DiDOM :

$document = new Document($str);

$elements = $document->find('a');

foreach($elements as $element) {
     $element->setValue($element->href);
}
Ответ написан
@mistergonza
PHP6 evangelist
На эту тему есть знаменитый комментарий на stackoverflow:
stackoverflow.com/questions/1732348/regex-match-op...

Для парсинга html используйте предназначенные для этого библиотеки:
https://github.com/symfony/dom-crawler
https://github.com/sunra/php-simple-html-dom-parser
и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы