有人可以解释这个php字符串行为

时间:2019-05-13 05:03:28

标签: php html string parsing

读取一行中包含字符<的文本会在该位置截断字符串,但是将'<'更改为'[',则会恢复整个字符串;

$buffer = '(18:07:18.206)(01426)DISPATCH: RX DSCHUTEANSW: status=0x20c001 gp [10 0 0 0 0] l_code_sc=16 code_sc=<SDtGt15JRK_001>';

echo $buffer . '<br>';

$buffer = str_replace('<', '[', $buffer);

echo $buffer . '<br>';
(18:07:18.206)(01426)DISPATCH: RX DSCHUTEANSW: status=0x20c001 gp [10 0 0 0 0] l_code_sc=16 code_sc=

(18:07:18.206)(01426)DISPATCH: RX DSCHUTEANSW: status=0x20c001 gp [10 0 0 0 0] l_code_sc=16 code_sc=[SDtGt15JRK_001>

3 个答案:

答案 0 :(得分:1)

在浏览器中查看源代码,它仍然存在。

<被您的浏览器视为打开的HTML标记,因此该字符串不会显示在<。

之后

改为使用此:

echo htmlspecialchars($buffer) . '<br>';

答案 1 :(得分:0)

问题不在于PHP解析字符串,而是Web浏览器如何解释该字符串。浏览器会将< >中的任何字符串视为HTML标记,并且不会直接在屏幕上显示该标记。

为了转义该符号并将其显示在屏幕上,可以在PHP中使用htmlentities函数。 (Ref

您可以按以下方式使用它:

$buffer = '(18:07:18.206)(01426)DISPATCH: RX DSCHUTEANSW: status=0x20c001 gp [10 0 0 0 0] l_code_sc=16 code_sc=<SDtGt15JRK_001>';

echo htmlentities($buffer) . '<br>';

答案 2 :(得分:0)

之所以会发生这种情况,是因为浏览器将文本<SDtGt15JRK_001>解释为html标签,并且不显示它,即使将其转换为字符串,行为也相同。

如果您希望在浏览器中也显示此文本,则需要使用htmlspecialchars来显示标记,如下所示:-

$buffer = "(18:07:18.206)(01426)DISPATCH: RX DSCHUTEANSW: status=0x20c001 gp [10 0 0 0 0] l_code_sc=16 code_sc=<SDtGt15JRK_001>";

echo htmlspecialchars($buffer) . '<br>'; //use htmlspecialchars

输出:-

(18:07:18.206)(01426)DISPATCH: RX DSCHUTEANSW: status=0x20c001 gp [10 0 0 0 0] l_code_sc=16 code_sc=<SDtGt15JRK_001>