PHP类返回含换行符的JSON响应问题求助
问题原因分析
嘿,这个问题我太熟悉了!咱们来一步步拆解:
你的问题根源在于HEREDOC语法的特性——它会原封不动保留你在标记内写的所有换行、空格和缩进,包括你为了代码美观添加的那些换行和缩进。
比如你在HEREDOC里写的每一行HTML结尾的换行,还有<div>前面的缩进空格,都会被完整保留在生成的字符串里。当这些字符串被存入$this->result数组,再通过json_encode转为JSON响应时,这些换行符会被转义成\n,在浏览器的调试工具里就会显示成你看到的↵符号。
解决方案
有两种简单的办法可以解决这个问题,推荐第一种,既不影响代码可读性,又能清理多余的空白:
方法1:清理HTML字符串中的多余空白
在将HEREDOC生成的HTML存入数组前,用trim()去掉首尾的空白,再用正则表达式把中间的多个空白(包括换行、制表符、多个空格)替换成单个空格。修改你的foreach循环部分:
foreach ($parteneri as $partener) { $html = <<<EOD <div id="{$partener['id']}" class="row lines"> <div class="col-md-1">{$nrcrt}</div> <div class="col-md-2 serie">{$partener['numefirma']}</div> <div class="col-md-1">{$partener['tippartener']}</div> <div class="col-md-2">{$partener['cif']}</div> <div class="col-md-2">{$partener['oras']}</div> <div class="col-md-2">{$partener['nume']} {$partener['prenume']}</div> <div class="col-md-2"> <span class="glyphicon glyphicon-search view-partener" title="Vizualizare"></span> <span class="glyphicon glyphicon-trash trash-partener" title="Stergere"></span> </div> </div> EOD; // 清理多余空白:去掉首尾空白,把所有连续空白(包括换行)换成单个空格 $cleanHtml = preg_replace('/\s+/', ' ', trim($html)); $this->result[] = $cleanHtml; $nrcrt++; }
这样处理后,生成的HTML字符串会变得紧凑,没有多余的换行和空格,JSON响应里也就不会出现那些↵符号了。
方法2:调整HEREDOC写法,去掉不必要的换行
如果你不想用正则,也可以直接把HEREDOC里的代码写成紧凑的一行(但会牺牲代码可读性):
$this->result[] = <<<EOD <div id="{$partener['id']}" class="row lines"><div class="col-md-1">{$nrcrt}</div><div class="col-md-2 serie">{$partener['numefirma']}</div><div class="col-md-1">{$partener['tippartener']}</div><div class="col-md-2">{$partener['cif']}</div><div class="col-md-2">{$partener['oras']}</div><div class="col-md-2">{$partener['nume']} {$partener['prenume']}</div><div class="col-md-2"><span class="glyphicon glyphicon-search view-partener" title="Vizualizare"></span> <span class="glyphicon glyphicon-trash trash-partener" title="Stergere"></span></div></div> EOD;
这种方法虽然能解决问题,但代码看起来很杂乱,不利于后续维护,所以更推荐第一种方法。
额外说明
其实这些换行符本身并不会影响HTML的渲染——浏览器会自动忽略HTML中的多余空白。但如果是你在调试时看到响应里的↵觉得不舒服,或者担心响应体积过大,那么清理空白就是很有必要的操作。
内容的提问来源于stack exchange,提问作者Leonida-Alexandru Diaconu
相关产品推荐
相关产品推荐

