PHP 中的串联字符串回声乱序
Concatenated String Echos Out of Order in PHP
这个简短的脚本在过去一天一直困扰着我。
我正在尝试将 mysql 数据库 table 中的一个值连接成一个字符串,但输出是乱序的。
考虑以下代码:
$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]
字符串末尾的回车 return 字符 \r
(十六进制 0D
)。
如果出现 CR 后没有换行符 \n
,它将导致控制台 return 到当前行的开头。然后它在行首打印 %
,覆盖 <
。
这可以通过将数据库值包装在 trim()
中来解决。
$foo ='<iframe src="http://www.website.com/embed/' . trim($row[0]) . '%';
您可以通过使用 bin2hex()
检查字符串并在末尾查找 0d
来测试它,或者简单地检查 strlen()
是否为预期长度,而不是预期长度加一。
如果那些回车符 return 不在此处,您应该考虑修复 table 或其输入源中的数据以避免将来出现此问题。
这个简短的脚本在过去一天一直困扰着我。
我正在尝试将 mysql 数据库 table 中的一个值连接成一个字符串,但输出是乱序的。
考虑以下代码:
$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]
字符串末尾的回车 return 字符 \r
(十六进制 0D
)。
如果出现 CR 后没有换行符 \n
,它将导致控制台 return 到当前行的开头。然后它在行首打印 %
,覆盖 <
。
这可以通过将数据库值包装在 trim()
中来解决。
$foo ='<iframe src="http://www.website.com/embed/' . trim($row[0]) . '%';
您可以通过使用 bin2hex()
检查字符串并在末尾查找 0d
来测试它,或者简单地检查 strlen()
是否为预期长度,而不是预期长度加一。
如果那些回车符 return 不在此处,您应该考虑修复 table 或其输入源中的数据以避免将来出现此问题。