我对这个简短的脚本有问题,在过去的一天中,这一直使我丧命。

我试图将一个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]被推到字符串的前面后,串联的任何东西?为什么在输出中完全忽略“
我如何获得所需的输出?

来自评论:

我应该补充一点,我正在服务器上的命令行中执行此操作。

最佳答案

鉴于您在服务器的命令行中看到了奇怪的输出,因此可以看出,存储在数据库中的数据有些不对劲。特别是,请注意在\r字符串末尾的回车符0D(十六进制$row[0])。

如果存在不带换行符\n的CR,它将导致控制台返回到当前行的开头。然后,它在行的开头打印%,覆盖<

通过将数据库值包装在trim()中,可以解决此问题。

$foo ='<iframe src="http://www.website.com/embed/' . trim($row[0]) . '%';


您可以通过使用bin2hex()检查字符串并在末尾查找0d来测试它,或者只是检查strlen()是期望的长度,而不是期望的长度加一。

如果不希望在那儿收到这些回车,则应考虑将数据固定在表中或表的输入源上,以避免将来再出现此问题。

关于php - 在PHP中串联的字符串回显顺序困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28424001/

10-11 01:43
查看更多