@lubovka999

Как Заменить все слэши в ссылках на тире?

Всем привет, ребят есть к примеру такой html код, как мне через preg_replace заменить в нем у ссылок
href="/privet/vova/love/"
- на вид -
href="/privet_vova_love"
. Помогите сломал уже голову.

Пример html
<section>
    <ul>
        <li><a href="/moskva/">Москва</a></li>
        <li><a href="/sankt-peterburg/">Санкт-Петербург</a></li>
        <li><a href="/gorod/novosibirsk/">Новосибирск</a></li>
        <li><a href="/gorod/ekaterinburg/">Екатеринбург</a></li>
        <li><a href="/gorod/nijniy-novgorod/">Нижний Новгород</a></li>
        <li><a href="/gorod/kazan/">Казань</a></li>
        <li><a href="/gorod/chelyabinsk/">Челябинск</a></li>
        <li><a href="/gorod/omsk/">Омск</a></li>
        <li><a href="/gorod/samara/">Самара</a></li>
        <li><a href="/gorod/rostov-na-donu/">Ростов-на-Дону</a></li>
        <li><a href="/gorod/sochi/">Сочи</a></li>
        <li><a href="/gorod/">ВСЕ ГОРОДА</a></li>
    </ul>
</section>
  • Вопрос задан
  • 233 просмотра
Решения вопроса 2
@synapse_people
$text = preg_replace_callback('/<li><a href=\"\/(?<link>.*?)\">/', '', $text);

вторым аргументом передать функцию, которая будет заменять / на -.
Ответ написан
@lubovka999 Автор вопроса
Решение оставлю тут:

Определяем калбак функцию
$data = preg_replace_callback('/<li><a href=\"\/(?<link>.*?)\">/', 'url_punk_decode', data);

Теперь пишем функцию которую мы указали в каллбак 'url_punk_decode'
function url_punk_decode($matches)
{
	$matches['link'] = str_replace('/', '_', $matches['link']);
	$matches['link'] = str_replace('_#', '#', $matches['link']);
	$matches['link'] = str_replace('_"', '"', $matches['link']);

	$match_good = preg_replace('/"\/(.*?)"/', '"/'.$matches['link'].'"', $matches[0]);
	$match_good = str_replace('_"', '"', $match_good);

	return $match_good;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@novrm
$href = '/privet/vova/love/';
$result = '/' . implode('_', array_diff(explode('/', $href), [''])); // privet_vova_love
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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