如何将带换行符的字符串加入PHP数组以供Javascript使用
问题核心原因
- 你使用的
get_field是WordPress ACF插件的方法,字段内的换行默认会被自动转换为<br />(带空格的闭合标签),你之前的替换规则只覆盖了<br>,没有匹配所有变体所以失效 - 手动拼接JS字符串的方式本身存在极高风险,除了换行,内容中的单引号、特殊字符都会直接破坏JS数组的语法结构
最优解决方案(推荐)
完全不需要手动拼接字符串,直接用PHP内置的json_encode()方法处理即可,它会自动把所有换行、引号、特殊字符转义为符合JS语法的格式,从根源避免结构破坏问题。
示例代码如下:
<?php // 初始化PHP数组存储门店数据 $shops = []; while ( $loop->have_posts() ) : $loop->the_post(); $shops[] = [ get_the_title(), get_field('phone'), get_field('address') ]; endwhile; wp_reset_query(); ?> <!-- 直接输出给JS变量即可,json_encode的结果本身就是合法的JS语法 --> <script> const shops = <?php echo json_encode($shops); ?>; </script>
手动拼接的修复方案(不推荐)
如果一定要沿用手动拼接的写法,需要补全替换规则,同时对所有字段的单引号做转义:
<?php while ( $loop->have_posts() ) : $loop->the_post(); $title = addslashes(get_the_title()); $address = get_field('address'); // 覆盖所有br标签变体和换行符 $address = str_replace(["\r", "\n", "<br>", "<br/>", "<br />"], '', $address); $address = addslashes($address); $phone = addslashes(get_field('phone')); $shops = $shops . "['".$title."','".$phone."','".$address."'],"; endwhile; wp_reset_query(); ?>
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

