使用PHP删除<a></a>之间的文本,但不删除href或<span> </span>之间的文本

时间:2016-11-21 17:38:44

标签: php strpos string-length strip-tags

尝试从</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;
    }
?>

enter image description here

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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;