使用 PHP 将字符串中的 <br> 替换为 space

Replacing <br> with space in string using PHP

我正在尝试用 PHP 中字符串中的 <br> 替换 space,但它似乎不起作用。我将如何纠正我所做的以使这项工作有效?

我试过的代码行如下:

    $keyword = str_replace("<br>", " ", getTextBetweenTags($html, "h4", "ctlAuthor"));

在代码中 returned 的字符串如下所示:

Dörte Kreher<br>Humboldt-Universität<br>Institut für Mathematik

return 到 PHP 页面的字符串如下:

Dörte KreherHumboldt-UniversitätInstitut für Mathematik

应该 return 编辑到 PHP 页面的所需字符串:

Dörte Kreher Humboldt-Universität Institut für Mathematik

这里是 getTextBetweenTags() 函数:

function getTextBetweenTags($string, $tagname, $tagid)
{
    $dochtml = new DOMDocument();
    $dochtml->loadHTML($string);
    $prgs = $dochtml->getElementsByTagName($tagname);
    $pcls = array();

    foreach($prgs as $prg)
    {
        if ($prg->getAttribute('id') == $tagid){
            $pcls[] = $prg->nodeValue;
        }
    }
    return $pcls[0];
}

尝试使用非中断 space html

$keyword = str_replace("<br>", "&nbsp;", getTextBetweenTags($html, "h4", "ctlAuthor"));

试试这个,它替换了字符串中的所有 html 代码

$keyword = preg_replace("#<[^>]+>#", ' ', getTextBetweenTags($html, "h4", "ctlAuthor"));

你为什么不用strip_tags?即:

$keyword = strip_tags(getTextBetweenTags($html, "h4", "ctlAuthor"));

strip_tags

Strip HTML and PHP tags from a string


string strip_tags ( string $str [, string $allowable_tags ] )

This function tries to return a string with all NULL bytes, HTML and PHP tags stripped from a given str. It uses the same tag stripping state machine as the fgetss() function.

https://php.net/strip_tags


根据您的评论更新:

$string = "Dörte Kreher<br>Humboldt-Universität<br>Institut für Mathematik";
$notags =  preg_replace('/<[^>]*>/', ' ', $string );
echo $notags;

输出:

Dörte Kreher Humboldt-Universität Institut für Mathematik

因为字符串来自 DOMDocument 中元素的节点值,所以需要保留 HTML。为了解决这个问题,代码行:

$pcls[] = $prg->NodeValue;

被替换为:

$pcls[] = $prg->ownerDocument->saveHTML($prg);

然后 HTML 标签可以替换为所需的输出,如下所示:

$keyword = str_replace("<br>", " ", getTextBetweenTags($html, "h4", "ctlAuthor"));