PHP中的串联字符串Echos乱序

时间:2015-02-10 04:15:05

标签: php mysql echo string-concatenation

我的这个简短的剧本有问题,过去一天一直在杀我。

我试图将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;在输出中完全被忽略了?

如何实现我想要的输出?

来自评论

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

1 个答案:

答案 0 :(得分:2)

鉴于您在服务器的命令行中看到了这个奇怪的输出,它表明存储在数据库中的数据存在问题。特别是,请注意\r字符串末尾的回车符0D(十六进制$row[0])。

如果CR后面没有换行符\n,则会导致控制台返回当前行的开头。然后它会在行的开头打印%,覆盖<

这可以通过将数据库值包装在trim()

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

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

如果那里不期望那些回车,你应该考虑修改你的表或其输入源中的数据,以避免将来出现这个问题。