首页 > 解决方案 > 使用 str_replace 忽略 HTML

问题描述

我正在尝试用 str_replace 用下划线 (_) 替换空格,但它也会影响 HTML 标记。

我的代码:

add_filter( 'facetwp_facet_html', function( $output, $params ) {
    if ( 'blog_tags' == $params['facet']['name'] ) {
        $output = str_replace(' ', '_', $output);
    }
    return $output;
}, 10, 2 );

预期的结果是:

<div class="checkbox">Dynamic_String_Exemple<span class="counter">1</span></div>

但它返回:

<div_class="checkbox">Dynamic_String_Exemple<span_class="counter">1</span></div>

div_class span_class

防止这种情况的最佳方法是什么?

标签: phpstringstr-replace

解决方案


我们只有一个示例字符串可供构建,因此我不保证这将适用于您项目中的所有情况,但是...

您应该使用 dom 解析技术,因为基本字符串函数定位在有效 html 中更容易出错。

代码:(演示

$html = <<<HTML
<div class="checkbox">Dynamic_String_Exemple<span class="counter">1</span></div>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$firstDivFirstNode = $dom->getElementsByTagName('div')->item(0)->childNodes->item(0);
$firstDivFirstNode->nodeValue = str_replace(' ', '_', $firstDivFirstNode->nodeValue);
echo trim($dom->saveHTML());

推荐阅读