从数据库中获取字符串时,Explode 无法正常工作
Explode is not working as it should when string fetched from database
我正在尝试对数据库中保存的产品名称使用爆炸。我在数据库中有一个名为:A4Tech KR-83FN Multimedia Bangla USB Black Comfort Round Edge Keycaps Normal Keyboard 的产品。当我使用 select 查询获取条目并对其使用 explode 时,它无法正常工作,并得到以下数组:
array (size=4)
0 => string 'A4Tech' (length=6)
1 => string 'KR-83FN' (length=7)
2 => string 'Multimedia' (length=10)
3 => string 'Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard' (length=68)
但是,当我复制文本并对其使用 explode() 时,它工作正常。
array (size=12)
0 => string 'A4Tech' (length=6)
1 => string 'KR-83FN' (length=7)
2 => string 'Multimedia' (length=10)
3 => string 'Bangla' (length=6)
4 => string 'USB' (length=3)
5 => string 'Black' (length=5)
6 => string 'Comfort' (length=7)
7 => string 'Round' (length=5)
8 => string 'Edged' (length=5)
9 => string 'Keycaps' (length=7)
10 => string 'Normal' (length=6)
11 => string 'Keyboard' (length=8)
代码如下:
<?php
$conn = new mysqli("localhost", "root", "", "dbname");;
$sql = "select * from products where name like '%A4Tech KR-83FN Multimedia%'";
$result = $conn->query($sql);
$row = $result->fetch_row();
$ss = $row[5];
//$ss = "A4Tech KR-83FN Multimedia Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard";
$exploded = explode(" ",$ss);
var_dump($exploded);
我想我遗漏了一些简单的东西,它是唯一有这个问题的产品名称。
我在它后面还有另一部分代码,它将 a-zA-Z0-9 和 space 以外的所有内容替换为“”,它不应该替换space 但该部分实际上从以下数组的第四个元素中删除了 space 的每一位。因此,space 未被视为 space。
array (size=4)
0 => string 'A4Tech' (length=6)
1 => string 'KR-83FN' (length=7)
2 => string 'Multimedia' (length=10)
3 => string 'Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard' (length=68)
如果代码对数据库中除此产品之外的所有产品都有效,那么按理说错误与此文本的格式有关。
通常我的赌注是字符串包含制表符而不是在它停止工作的点之后的 spaces:
A4Tech KR-83FN Multimedia Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
{ Spaces } { Tabs }
然而,在你的情况下,字符串应该是 60 bytes
,实际上是 68 bytes
(根据你的问题)所以我敢打赌,而不是制表符(单个制表符只会把它带到 64 bytes
) 你有 newline/carriage returns 喜欢 \r\n
.
鉴于它只是一种产品,我强烈建议您手动更改条目...
您的更新 - 替换 [^a-zA-Z0-9 ]
的附加代码 - 似乎证实了理论。
当然可以是\t\t
、\n\t
、\n\n
或任何其他白色space字符的组合。
我正在尝试对数据库中保存的产品名称使用爆炸。我在数据库中有一个名为:A4Tech KR-83FN Multimedia Bangla USB Black Comfort Round Edge Keycaps Normal Keyboard 的产品。当我使用 select 查询获取条目并对其使用 explode 时,它无法正常工作,并得到以下数组:
array (size=4)
0 => string 'A4Tech' (length=6)
1 => string 'KR-83FN' (length=7)
2 => string 'Multimedia' (length=10)
3 => string 'Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard' (length=68)
但是,当我复制文本并对其使用 explode() 时,它工作正常。
array (size=12)
0 => string 'A4Tech' (length=6)
1 => string 'KR-83FN' (length=7)
2 => string 'Multimedia' (length=10)
3 => string 'Bangla' (length=6)
4 => string 'USB' (length=3)
5 => string 'Black' (length=5)
6 => string 'Comfort' (length=7)
7 => string 'Round' (length=5)
8 => string 'Edged' (length=5)
9 => string 'Keycaps' (length=7)
10 => string 'Normal' (length=6)
11 => string 'Keyboard' (length=8)
代码如下:
<?php
$conn = new mysqli("localhost", "root", "", "dbname");;
$sql = "select * from products where name like '%A4Tech KR-83FN Multimedia%'";
$result = $conn->query($sql);
$row = $result->fetch_row();
$ss = $row[5];
//$ss = "A4Tech KR-83FN Multimedia Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard";
$exploded = explode(" ",$ss);
var_dump($exploded);
我想我遗漏了一些简单的东西,它是唯一有这个问题的产品名称。
我在它后面还有另一部分代码,它将 a-zA-Z0-9 和 space 以外的所有内容替换为“”,它不应该替换space 但该部分实际上从以下数组的第四个元素中删除了 space 的每一位。因此,space 未被视为 space。
array (size=4)
0 => string 'A4Tech' (length=6)
1 => string 'KR-83FN' (length=7)
2 => string 'Multimedia' (length=10)
3 => string 'Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard' (length=68)
如果代码对数据库中除此产品之外的所有产品都有效,那么按理说错误与此文本的格式有关。
通常我的赌注是字符串包含制表符而不是在它停止工作的点之后的 spaces:
A4Tech KR-83FN Multimedia Bangla USB Black Comfort Round Edged Keycaps Normal Keyboard
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
{ Spaces } { Tabs }
然而,在你的情况下,字符串应该是 60 bytes
,实际上是 68 bytes
(根据你的问题)所以我敢打赌,而不是制表符(单个制表符只会把它带到 64 bytes
) 你有 newline/carriage returns 喜欢 \r\n
.
鉴于它只是一种产品,我强烈建议您手动更改条目...
您的更新 - 替换 [^a-zA-Z0-9 ]
的附加代码 - 似乎证实了理论。
当然可以是\t\t
、\n\t
、\n\n
或任何其他白色space字符的组合。