Поэтому у меня есть небольшая проблема с апострофами в MySQL при возврате строк в текстовые поля, чтобы они могли быть отредактированы.
Проблема заключается в том, что строки, содержащие апостроф (‘) в строке столбца, echo
штраф как текст на странице, но когда отображается как значение текстового поля, строка обрезается в апострофе и заканчивается косой чертой.
Я удалил косую черту, используя stripslashes($nam)
с $nam
будучи переменной, я загружаю свой столбец Имя в использование mysqli_fetch_assoc
, Но остальная часть строки по-прежнему не возвращается.
Опять же, при отражении на странице, которая перечисляет все строки, проблем нет, полная строка выводится в порядке, с апострофами и без добавленных слешей.
Это когда строка отображается на странице:
Это когда строка отображается как значение текстового поля:
В инструментах разработчика Chrome я вижу, что апостроф закрывает value
тег слишком рано, а остальная часть строки обрабатывается как свойство HTML.
Итак, как я могу предотвратить это, в настоящее время мой код (очень урезанная версия, чтобы не заполнять страницу бессмысленным несвязанным кодом), который я использую для отображения:
while($row = mysqli_fetch_assoc($result)):
$nam = $row["Name"];
$nam = mysqli_real_escape_string($mysqli, $nam);
$nam = mysqli_real_escape_string($mysqli, $nam);
echo "<label for='Name'>Name</label></td>
<td><input type='text' name='Name' id='Name' placeholder='Item Name' value='".$nam."' required></td>";
endwhile;
Поэтому я начал набирать этот вопрос и подумал: «Я лучше попробую это, прежде чем публиковать сообщения, потому что в противном случае это могло бы выглядеть очень плохо, если это было бы простым решением».
Оказалось, я был прав. Тем не менее, я еще опубликую этот вопрос, чтобы начинающие люди могли извлечь уроки из этого, поскольку это что-то очень простое, и отчасти потому, что я уже напечатал вопрос.
Ответ:
Ранее я использовал кавычки "
инкапсулировать то, что я хотел отразить, и апострофы '
чтобы установить значения, поэтому в этом случае мой код был:
echo "<input type='text' name='Name' id='Name' placeholder='Item Name' value='".$nam."' required>";
Ключевым моментом, на который стоит обратить внимание, является код: value='".$nam."'
,
Поскольку строка возвращала апостроф, я предполагаю, что PHP распознал этот апостроф как конец value
и короткую строку, отсюда и странный исходный код Chrome Developer Tools, включающий остальную часть моей строки, без апострофа.
Чтобы это исправить, я просто изменил апострофы на кавычки и избежал их, используя обратную косую черту \
, Для тех, кто не знает, экранирование выполняется путем добавления обратной косой черты перед тем персонажем, которому нужно убежать, и это удаляет все специальные способности этого персонажа. Если бы я не избежал кавычки, то кавычка закончила бы мою echo
и оставил меня с синтаксической ошибкой. Избегая этого, я говорю PHP, что кавычка является частью HTML, который я хочу echo
а не конец echo
,
Итак, мой новый код сейчас:
echo "<input type='text' name='Name' id='Name' placeholder='Item Name' value=\"".$nam."\" required>";
Итак, урок, который я усвоил: не пытайтесь избежать кавычек, просто используя их для инкапсуляции вашего echo
,
Других решений пока нет …