我的这个简短的剧本有问题,过去一天一直在杀我。
我试图将mysql数据库表中的值连接成一个字符串,输出乱序。
请考虑以下代码:
$result = mysqli_query($con, "SELECT something FROM table");
while ($row = mysqli_fetch_array($result)){
$foo ='<iframe src="http://www.website.com/embed/' . $row[0] . '%';
echo $foo;
}
此输出结果为:
%iframe src="http://www.website.com/embed/84a42780062ce000dcb5
我想要的输出是:
<iframe src="http://www.website.com/embed/84a42780062ce000dcb5%
为什么在$ row [0]之后连接的任何东西被推到了字符串的前面?为什么&#34;&lt;&#34;在输出中完全被忽略了?
如何实现我想要的输出?
来自评论:
我应该补充一点,我在服务器的命令行中执行此操作。
答案 0 :(得分:2)
鉴于您在服务器的命令行中看到了这个奇怪的输出,它表明存储在数据库中的数据存在问题。特别是,请注意\r
字符串末尾的回车符0D
(十六进制$row[0]
)。
如果CR后面没有换行符\n
,则会导致控制台返回当前行的开头。然后它会在行的开头打印%
,覆盖<
。
这可以通过将数据库值包装在trim()
。
$foo ='<iframe src="http://www.website.com/embed/' . trim($row[0]) . '%';
您可以通过使用bin2hex()
检查字符串并在最后查找0d
来测试它,或者只是检查strlen()
是否是预期的长度,而不是预期的长度加一。
如果那里不期望那些回车,你应该考虑修改你的表或其输入源中的数据,以避免将来出现这个问题。