Nano Hash - криптовалюты, майнинг, программирование

Как установить атрибут значения HTML (с пробелами)

Когда я использую PHP для установки значения элемента ввода HTML-формы, он отлично работает, если в данных нет пробелов.

<input type="text" name="username"
<?php echo (isset($_POST['username'])) ? "value = ".$_POST["username"] : "value = \"\""; ?> />

Если я ввожу «Джонатан» в качестве имени пользователя, оно повторяется, как и ожидалось. Однако, если я ввожу «Большой Тед», я получаю повторение «Большой» только при отправке формы.

Обратите внимание, что переменная $_POST["Username"] верна; когда я повторяю это с помощью PHP, для него установлено значение «Большой Тед».

20.06.2010

Ответы:


1

Процитируйте это. В противном случае пробел станет просто разделителем атрибутов, а все, что находится после пробелов, будет рассматриваться как атрибуты элемента. Щелкните правой кнопкой мыши страницу в веб-браузере и просмотрите исходный код. Это не должно выглядеть так (см. также цвета подсветки синтаксиса):

<input value=Big Ted>

а скорее это

<input value="Big Ted">

Не говоря уже о том, что это все равно сломается, если у кого-то есть кавычки в его имени (и поэтому ваш код чувствителен к XSS атаки). Используйте htmlspecialchars().

Пример начала:

<input value="<?php echo (isset($_POST['username']) ? htmlspecialchars($_POST['username']) : ''); ?>">
20.06.2010
  • XSS тут ни при чем. Кодировка требуется по стандарту. Даже если вы редактируете полностью разрешенный HTML-код в административной области, вам необходимо htmlencode значения, включая содержимое текстовой области. 20.06.2010
  • @Col: где я сказал, что XSS связан с конкретной проблемой? :) 20.06.2010
  • ах да я проглядел. Сосредоточился на ключевом слове, знаете ли :) 20.06.2010

  • 2
    <input type="text" name="username"
    <?php echo (isset($_POST['username'])) ? "value = '".$_POST["username"]' : "value = ''"; ?> />
    

    Вы должны заключить результат переменной в кавычки, чтобы браузер мог знать, что является содержимым ввода.

    20.06.2010
  • добавьте цитату к своему имени, и вы получите ту же проблему :) 20.06.2010

  • 3

    Как видите, это вовсе не вопрос PHP5 и даже не PHP.
    Базовые знания HTML обязательны для тех, кто хочет стать пользователем PHP.

    А с использованием шаблонов это выглядит намного аккуратнее:

    Получение кода части данных:

    $username = "";
    if isset($_POST['username'])) $username = htmlspecialchars($_POST["username"]);
    

    И код шаблона:

    <input type="text" name="username" value="<?=$username?>">
    

    Если вы разделите свой код на 2 части, он станет более удобным и читабельным.

    20.06.2010
  • Не рекомендуется использовать короткие открытые теги, поскольку сервер может отключить их, однако я бы не советовал рекомендовать это OP. 20.06.2010
  • @meder, просто включи его. Не ахти какое дело. Вот для чего нужны настройки конфигурации. 20.06.2010
  • Почему ты? Во-первых, это плохая практика. Это и я бы никогда не использовал PHP, если бы я управлял сервером. 20.06.2010
  • @meder, кто сказал, что это плохая практика? 20.06.2010
  • @Col Shrapnel - большинство опытных PHP-разработчиков согласны с тем, что это плохая практика. Они также постепенно исчезают в PHP6, не так ли? stackoverflow.com/questions/200640 / 20.06.2010
  • @meder нет, они не прекращаются в PHP6, это пустые слухи. Распространяется этими самыми опытными разработчиками PHP. Хотя я не вижу там ни одного. ZF использует короткие теги в своей системе шаблонов, если вы предпочитаете толстый авторитет в качестве доказательства. 20.06.2010

  • 4

    просто убедитесь, что вы поставили двоеточие после поля, например:

      <option value="'.$row['name'].'">
    
    18.03.2014

    5
    <input type="text" name="username"
    <?php echo (isset($_POST['username'])) ? ('value = "'.$_POST["username"].'"') : "value = \"\""; ?> />
    

    Будьте в курсе использования цитаты.

    20.06.2010
  • добавьте цитату к своему имени, и вы получите ту же проблему :) 20.06.2010
  • @Col Shrapnel - это был очень тривиальный вопрос, и я слишком привык к тому, что фреймворки делают всю работу, чтобы мне советовать это, но конечно ... 20.06.2010
  • Почему бы тогда не привести пример с вашим любимым фреймворком? 20.06.2010
  • Потому что это выходит за рамки этого простого вопроса и просто слишком усложняет ситуацию. 20.06.2010
  • Его проблема заключалась в том, что он не заключал в двойные кавычки строку, в которой был пробел (правильно кодируя атрибут, имеющий значение в HTML), решение заключалось в том, чтобы заключить его в двойные кавычки, чтобы он был действительным HTML, таким образом отвечая на его вопрос . Вы слишком придирчивы к тому, что не так важно. Спасибо за минус. 20.06.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..