在锚标记内移动字符串的一部分

时间:2017-07-11 10:18:19

标签: php

我有一个通过函数生成的字符串。

$string = function();

它产生类似的东西:

$string = '<ul><li><a href="">Test</a>(10)</li>';

我的问题是,如何将(10)部分移到锚标记的末尾,所以我们有:

$string = '<ul><li><a href="">Test (10)</a></li>';

我想对列表项中的所有锚标记执行此操作。

适当的PHP方法是什么?

2 个答案:

答案 0 :(得分:3)

只需使用srt_replace函数作为字符串变量,如下所示:

if(strpos($string,"</a>")) {
    $string = str_replace('</a>',' ', $string);
    // output <ul><li><a href="">Test'(10)</li>
    echo $string = str_replace('</li>','</a></li>', $string);
    // output <ul><li><a href="">Test (10)</a></li>
}

答案 1 :(得分:0)

使用HTML DOM可以更改/修改元素值。

例如,

<?php
    $string = '<ul><li><a href="test.php">Test</a>(10)</li></ul>';

    echo $string; // Old strings.

    $dom_document = new DOMDocument();

    $dom_document->loadHTML($string);

    $new_string = "";
    foreach($dom_document->getElementsByTagName('ul') as $ul){ // For all ul.
        $new_string .= "<ul>";
        foreach($ul->childNodes as $li){ // For all li.
            $new_string .= "<li>";
            $i=0;
            foreach($li->childNodes as $a){
                if(isset($a->attributes[0]->value)){
                    $href = $a->attributes[0]->value;
                }
                if($i===0){
                    $new_string .= '<a href="'.$href.'">';
                }
                $new_string .= $a->nodeValue;
                $i++;
            }
            $new_string .= "</a>";
            $new_string .= "</li>";
        }
        $new_string .= "</ul>";
    }

    echo $new_string; // New generated strings.
?>

请参阅Fiddle