strpos — Удалить текст между & lt; a & gt; & lt; / a & gt; но не href или & lt; span & lt; / span & gt; использование переполнения стека

Попытка удалить текст между </span> а также </a>, Я хочу просто удалить some text here сразу после </span> так что это показывает только значок.

$bad_string = '<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span>some text here</a></li>';

$good_string = '<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span></a></li>';

Что в настоящее время перекликается:

<ul id="menu-social-menu-1" class="menu">
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span>some text here</a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span>some text here</a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span>some text here</a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span>some text here</a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span>some text here</a></li>
</ul>

Что должно повториться:

<ul id="menu-social-menu-1" class="menu">
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span></a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span></a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span></a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span></a></li>
<li class="someclasses"><a target="_blank" href="http:www.example.com/dir/handle"><span></span></a></li>
</ul>

Используя этот код ниже в WordPress, текст после интервала все еще присутствует. Он не удалит текст после </span>, В чем моя ошибка? Вот:

<?php if ( has_nav_menu( 'social-menu' ) ) {
$menu = wp_nav_menu( array( 'theme_location' => 'social-menu', 'fallback_cb' => '', 'echo' => false ) );

function convertURL($menu) {
return preg_replace("/<a target=\"_blank\" href=\"([^\"]+?)\"><span><\/span>.*?<\/a>/", "<a target=\"_blank\" href=\"$1\"><span></span></a>", $menu);
}

echo $menu;
}
?>

введите описание изображения здесь

0

Решение

Почему бы вам просто не решить это с помощью регулярного выражения?

function convertURL($url) {
return preg_replace("/<a href=\"([^\"]+?)\">.*/", "<a href=\"$1\"><span></span></a>", $url);
}
// input:  <a href="http:www.example.com/dir/handle"><span></span>some text here</a>
// output: <a href="http:www.example.com/dir/handle"><span></span></a>

РЕДАКТИРОВАТЬ:
test.php:

<?php
function convertURL($url) {
return preg_replace("/<a href=\"([^\"]+?)\">.*/", "<a href=\"$1\"><span></span></a>", $url);
}

foreach(['<a href="http://linkedin.com/some/vanity"><span></span>some text here</a>', '<a href="http:www.example.com/dir/handle"><span></span>some text here</a>'] as $url) {
echo "$url => ";
echo convertURL($url)."\n";
}

php test.php:

$ php /tmp/test.php
<a href="http://linkedin.com/some/vanity"><span></span>some text here</a> => <a href="http://linkedin.com/some/vanity"><span></span></a>
<a href="http:www.example.com/dir/handle"><span></span>some text here</a> => <a href="http:www.example.com/dir/handle"><span></span></a>
2

Другие решения

обязательное https://stackoverflow.com/a/1732454/2191572 но это должно работать.

Если я могу перефразировать ваши требования, то вы хотите удалить вещи между </span> а также </a>

$bad_string = '<a href="http:www.example.com/dir/handle"><span>social icon</span>some text here</a>';

$parts = explode('</span>', $bad_string); // explode on </span> and save the array
array_pop($parts); // remove last element of array which should be "some text here</a>"$parts[] = '</a>'; // re-add the </a>

$good_string = implode('</span>', $parts); // re-join the array on </span>

echo $good_string;
1

По вопросам рекламы [email protected]