2016-11-21 135 views
0

嘗試從</span></a>之間刪除文本。我想只是在</span>之後刪除some text here,以便它只顯示圖標。刪除<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> 

編輯:
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

正確的。這正是我所追求的,但由於某種原因,href也被剝離了。 – JonnyBorg

+0

@JonnyBorg甚至使用我的解決方案? – MonkeyZeus

+0

@JonnyBorg你可以用你試圖解析的'$ bad_string'來更新你的問題嗎?確保指出是否有換行符\ n或任何東西,因爲如果你有多個URL,那麼必須執行額外的預處理 – MonkeyZeus

相關問題