我有一个由Web服务返回的字符串,其中包含换行符“\ n”。当我尝试使用nl2br函数输出字符串时,字符串将按原样返回,字符串中包含“\ n”。
新行字符是否可能需要一些特殊的编码才能被识别,或者我在这里遗漏了一些微不足道的东西?
输入字符串的十六进制表示
48617570747374726173736520315c6e416e737072656368706172746e65723a204d6178204d75737465726d616e6e
答案 0 :(得分:1)
将所有换行符替换为br标记 最好的解决方案是:
<?php
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
return $string;
}
?>
因为每个操作系统都有不同的ASCII字符用于换行符:
windows = \r\n
unix = \n
mac = \r
答案 1 :(得分:1)
48617570747374726173736520315c6e416e737072656368706172746e65723a204d6178204d75737465726d616e6e
根据您的十六进制字符串,您的字符串似乎不包含换行符。它只是\n
- 两个字节5c6e
,其中5c
是\
而6e
是n
。但新行是0a
echo (bin2hex("\n")); // 0a
您可以使用\n
将<br />
替换为str_replace
。
$string = hex2bin('48617570747374726173736520315c6e416e737072656368706172746e65723a204d6178204d75737465726d616e6e');
echo str_replace('\n', "<br/>\n", $string);
// please note, that '\n' and "\n" are different in PHP, '\n' - just two symbols, "\n" - one new line symbol.
答案 2 :(得分:0)
nl2br - 在字符串
中的所有换行符之前插入HTML换行符
它不会用换行符替换换行符,而是先插入换行符。