preg_split() 字符串包含 '<'
preg_split() with strings containing '<'
我正在解析 php 中的许可证密钥列表。
不幸的是,结果并不像预期的那样。
问题似乎是由特殊字符“<”引起的。
如果有人知道可能的解决方案,那就太好了。
$file_content = '
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9';
$file_array = preg_split("/\n/", $file_content);
echo '<pre>';
print_r($file_array);
输出
[0] =>
[1] => HM$WN*G&Z58CY8FPUA
[2] => F*QZHZGK#&*@*492&T
[3] => JJKXP P8ZHZ C6HXQFGJ*Y2+#SDZT9
[6] => BYYYMEGMQ73G5K#U7F
[7] => P>+F=GG7F*U# B+ZZYTGX&LF6@6XUXU
[9] => X&PHNAGN+X>
在您的情况下使用 preg_split()
没有任何好处。使用
$file_array = explode("\n", $file_content);
相反,或者如果内容是从文件中读取的,只需执行
$file_array = file($filename, FILE_IGNORE_NEW_LINES);
同样的结果。
编辑
but the result should be look like this
如果您的意思是输出与您的问题相同 - 是的,因为它是正确的输出。问题是您在 Web 浏览器中查看此内容,然后可能会将 <...
视为 HTML 标记的一部分。在您的 print_r()
之前添加 echo '<pre>';
以防止这种情况或 运行 您在控制台中的脚本。
您的拆分工作正常,唯一的问题是浏览器将这些符号转换为标签并导致了这种情况。您可以通过 运行 这个(我使用 htmlentities)来检查:
<?php
$file_content = '
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9';
$file_array = preg_split("/\n/", $file_content);
array_map("HTMLescape", $file_array);
function HTMLescape($a) {
echo "<pre>".htmlentities($a)."</pre>";
}
输出:
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9
此外,正如@Marcin Orlowski 指出的那样,如果只是拆分这条线,您可以选择 explode which is faster.
您的代码经过一些小的修改后工作正常:
<?php
$file_content = <<<'EOT'
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9
EOT;
$file_array = preg_split("/\n/", $file_content);
print_r($file_array);
php cli 上的明显输出是:
Array
(
[0] => HM$WN*G&Z58CY8FPUA
[1] => F*QZHZGK#&*@*492&T
[2] => JJKXP<GZRPKGS7J!EW
[3] => P8ZHZ<GCNNR6X=Z7PW
[4] => C6HXQFGJ*Y2+#SDZT9
[5] => BYYYMEGMQ73G5K#U7F
[6] => P>+F=GG7F*U#<RT!6H
[7] => B+ZZYTGX&LF6@6XUXU
[8] => X&PHNAGN+X><NZYN#9
)
请注意,要在 html 显示浏览器中可视化该结果,您必须转义 html 特定字符(如 <
和 >
)。但这与拆分输入字符串无关,你的问题是什么。
我正在解析 php 中的许可证密钥列表。 不幸的是,结果并不像预期的那样。 问题似乎是由特殊字符“<”引起的。 如果有人知道可能的解决方案,那就太好了。
$file_content = '
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9';
$file_array = preg_split("/\n/", $file_content);
echo '<pre>';
print_r($file_array);
输出
[0] =>
[1] => HM$WN*G&Z58CY8FPUA
[2] => F*QZHZGK#&*@*492&T
[3] => JJKXP P8ZHZ C6HXQFGJ*Y2+#SDZT9
[6] => BYYYMEGMQ73G5K#U7F
[7] => P>+F=GG7F*U# B+ZZYTGX&LF6@6XUXU
[9] => X&PHNAGN+X>
在您的情况下使用 preg_split()
没有任何好处。使用
$file_array = explode("\n", $file_content);
相反,或者如果内容是从文件中读取的,只需执行
$file_array = file($filename, FILE_IGNORE_NEW_LINES);
同样的结果。
编辑
but the result should be look like this
如果您的意思是输出与您的问题相同 - 是的,因为它是正确的输出。问题是您在 Web 浏览器中查看此内容,然后可能会将 <...
视为 HTML 标记的一部分。在您的 print_r()
之前添加 echo '<pre>';
以防止这种情况或 运行 您在控制台中的脚本。
您的拆分工作正常,唯一的问题是浏览器将这些符号转换为标签并导致了这种情况。您可以通过 运行 这个(我使用 htmlentities)来检查:
<?php
$file_content = '
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9';
$file_array = preg_split("/\n/", $file_content);
array_map("HTMLescape", $file_array);
function HTMLescape($a) {
echo "<pre>".htmlentities($a)."</pre>";
}
输出:
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9
此外,正如@Marcin Orlowski 指出的那样,如果只是拆分这条线,您可以选择 explode which is faster.
您的代码经过一些小的修改后工作正常:
<?php
$file_content = <<<'EOT'
HM$WN*G&Z58CY8FPUA
F*QZHZGK#&*@*492&T
JJKXP<GZRPKGS7J!EW
P8ZHZ<GCNNR6X=Z7PW
C6HXQFGJ*Y2+#SDZT9
BYYYMEGMQ73G5K#U7F
P>+F=GG7F*U#<RT!6H
B+ZZYTGX&LF6@6XUXU
X&PHNAGN+X><NZYN#9
EOT;
$file_array = preg_split("/\n/", $file_content);
print_r($file_array);
php cli 上的明显输出是:
Array
(
[0] => HM$WN*G&Z58CY8FPUA
[1] => F*QZHZGK#&*@*492&T
[2] => JJKXP<GZRPKGS7J!EW
[3] => P8ZHZ<GCNNR6X=Z7PW
[4] => C6HXQFGJ*Y2+#SDZT9
[5] => BYYYMEGMQ73G5K#U7F
[6] => P>+F=GG7F*U#<RT!6H
[7] => B+ZZYTGX&LF6@6XUXU
[8] => X&PHNAGN+X><NZYN#9
)
请注意,要在 html 显示浏览器中可视化该结果,您必须转义 html 特定字符(如 <
和 >
)。但这与拆分输入字符串无关,你的问题是什么。