尝试从</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 :(得分: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;