我对这个短脚本有一个问题,这个问题在过去的一天里一直困扰着我。
我试图将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]之后连接的任何内容都会被推到字符串的前面?为什么"<"在输出中被完全忽略?
如何实现我想要的输出?
来自评论:
我应该补充一下,我是在服务器的命令行中执行此操作的。
鉴于您在服务器的命令行中看到了这个奇怪的输出,这表明存储在数据库中的数据出现了问题。特别要注意$row[0]
字符串末尾的回车字符'r
(十六进制0D
)。
如果存在一个CR,而后面没有换行'n
,则会导致控制台返回到当前行的开头。然后,它在行首打印%
,覆盖<
。
这可以通过将数据库值封装在trim()
中来解决。
$foo ='<iframe src="http://www.website.com/embed/' . trim($row[0]) . '%';
您可以通过使用bin2hex()
检查字符串并在末尾查找0d
来测试它,或者简单地检查strlen()
是否为预期长度,而不是预期长度加1。
如果不希望出现这些回车,则应考虑修复表中或其输入源中的数据,以避免将来出现此问题。