php - 使用 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
防止这种情况的最佳方法是什么?
解决方案
我们只有一个示例字符串可供构建,因此我不保证这将适用于您项目中的所有情况,但是...
您应该使用 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());
推荐阅读
- r - 块 R-studio 被窃听,不打印数据帧。降价
- next.js - 如何使用 postcss 为 Next.js 中的每个页面加载单独的 css 文件
- c# - EF Sql Query参数不返回结果
- python - 你能帮我找出这段代码最坏情况下的大 O 时间复杂度吗?
- python - 如何将字符串分解为嵌套标记?
- symfony - 使用 localhost/myproject/web/app_dev.php/PATH 的 symfony 3.4 页面未完全加载
- python - 提高运行时效率的 Pythonic 解决方案
- node.js - 使用 Nodemailer 接收退回的电子邮件
- python - Python django图像上传不起作用
- php - 如何从特定于 id 的 mysql 数据库在我的 .blade 视图页面上显示照片