У меня проблема с этим коротким сценарием, который убил меня за прошедший день.
Я пытаюсь объединить значение из таблицы базы данных 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
, это заставит консоль вернуться к началу текущей строки. Затем печатает %
в начале строки, перезаписывая <
,
Это можно решить, обернув значение базы данных в trim()
,
$foo ='<iframe src="http://www.website.com/embed/' . trim($row[0]) . '%';
Вы можете проверить это, проверив строку с bin2hex()
и ищет 0d
в конце или просто проверяя, что strlen()
это ожидаемая длина, а не ожидаемая длина плюс один.
Если эти возвраты каретки там не ожидаются, вам следует рассмотреть возможность фиксации данных в вашей таблице или в ее источнике ввода, чтобы избежать этой проблемы в будущем.
Других решений пока нет …