WordPress自定义文章生成XML时ACF文本域 字符无法替换问题
解决ACF文本域换行生成
无法移除的问题
嘿,我之前在处理WordPress自定义文章生成XML时,也踩过几乎一模一样的坑!你遇到的
其实是**回车符(CR,ASCII码13)**的HTML实体形式,光用str_replace(' ', '', ...)没用,大概率是因为原始内容里的不是字符串"
",而是实际的回车控制字符,只是在XML输出时被转成了这个实体。
给你几个靠谱的解决思路,按顺序试试:
1. 直接替换原始回车字符
既然
对应的是ASCII 13,直接用chr(13)匹配原始字符替换:
// 先处理标签,再替换回车和换行 $stripped = strip_tags($addressValue['c_restaurant_map_address'], '<br /><br/><br>'); $cleaned = str_replace(array('<br />', '<br>', chr(13), chr(10)), '', $stripped);
这里顺便把换行符(LF,ASCII 10)也一起处理了,避免残留其他换行痕迹。
2. 先解码HTML实体再清理
如果内容已经被HTML编码过,实体形式的 是实际存在的字符串,那就先解码再替换:
$decoded = html_entity_decode($addressValue['c_restaurant_map_address']); $cleaned = str_replace(array('<br />', '<br>', "\r", "\n"), '', strip_tags($decoded));
html_entity_decode会把所有HTML实体转成原始字符,包括
变成回车符,之后再统一替换掉就行。
3. 用正则表达式一次性搞定所有情况
如果想偷懒一步到位,正则可以匹配所有换行相关的标签和控制字符:
$cleaned = preg_replace('/(<br\s*\/?>|\r|\n)/i', '', strip_tags($addressValue['c_restaurant_map_address'], '<br>'));
这个正则会忽略大小写匹配<br>、<br/>、<br />,还有回车(\r)、换行(\n),一次性全部替换为空。
你原来的代码没生效,核心原因是混淆了原始控制字符和HTML实体字符串——XML输出时会把回车符自动转成 ,但你处理的是原始内容,所以要针对原始字符操作,而不是实体字符串。
内容的提问来源于stack exchange,提问作者Alan Cordova
相关产品推荐
相关产品推荐

