2016-11-21 1 views
0

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

$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; 
    } 
?> 

enter image description here

ответ

2

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

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> 

EDIT:
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> 
+0

Я закончил этот маршрут. Было проще и чище. Я обновляю регулярное выражение для учетной записи для более чем 1 набора URL. Я обновляю свой код выше с конечным результатом. – JonnyBorg

+0

Я добавил дополнительный блок кода к моему вопросу, пытаясь включить вашу функцию. Этот метод имеет для меня наибольший смысл и является более чистым подходом. Но, видимо, я не выполняю это правильно. Мысли? – JonnyBorg

+0

@JonnyBorg попытается удалить '?' Из регулярного выражения. Так что это '. *? <\/a>' – PKeidel

1

обязательное 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; 
+0

Correct. Это именно то, что мне нужно, но href по какой-то причине тоже стесняются. – JonnyBorg

+0

@ JonnyBorg даже с помощью моего решения? – MonkeyZeus

+0

@JonnyBorg Не могли бы вы обновить свой вопрос с помощью точной '$ bad_string', которую вы пытаетесь разобрать? Не забудьте указать, есть ли новые строки '\ n' или что-то еще, потому что если у вас несколько URL-адресов, тогда потребуется дополнительная предварительная обработка. – MonkeyZeus

Смежные вопросы