【问题标题】:Ignore HTML with str_replace使用 str_replace 忽略 HTML
【发布时间】:2021-08-09 08:44:56
【问题描述】:

我正在尝试用 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_classspan_class

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

【问题讨论】:

  • 您可以通过使用 html 解析器解析 html 来防止这种情况。您的意见会有何不同?

标签: php string str-replace


【解决方案1】:

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

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

代码:(Demo)

$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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多