28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
1

проблемы с кавычками

13.03.2020, 03:47. Показов 1847. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос, как правильно написать 3-ю строку php-кода:
PHP
1
2
3
$zzz = '< 33 ';
echo ('<label for="qwe">');
echo('<input type="checkbox" id="qwe" value='.$zzz.' />'.$row["qwe"].'</label>');
чтобы на выходе в html получить вот так:
HTML5
1
<input type="checkbox" id="qwe" value"< 33 " />
Добавлено через 21 минуту
Простите, вопрос снят, туплю, нашёл ответ:
PHP
1
value="'. $zzz .'"
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2020, 03:47
Ответы с готовыми решениями:

Spreadsheet_Excel_Writer проблемы с кавычками
Здравствуйте. Создаю на сервере xls файл с помощью Spreadsheet_Excel_Writer. Вот так Код: ...

Неявное преобразование типа данных date в int недопустимо - проблемы с кавычками
При таком варианте, ругается на 17-ю строку USE IPK GO DECLARE @org int, @sheet int, @dat...

Трабл с кавычками
Всем привет ! Такая ситуация: пусть у нас есть вот такая форма &lt;form name=&quot;TEST&quot; method=&quot;post&quot;...

Работа с кавычками с++
можете ли вы мне помочь со столь стервозной проблемой. Допустим у меня есть строка - string str =...

11
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,798
13.03.2020, 14:12 2
Хорошая практика закрывать php тэг при верстке
PHP
1
2
3
4
5
6
<?php
...
$zzz = '< 33 ';
?>
<label for="qwe">
  <input type="checkbox" id="qwe" value='<?= $zzz ?>' /><?= $row["qwe"] ?></label>
1
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
13.03.2020, 19:17  [ТС] 3
Цитата Сообщение от crautcher Посмотреть сообщение
Хорошая практика закрывать php тэг при верстке
даже если связка <label><input> формируется в while?
PHP
1
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
т.е. вот так более правильно?
PHP
1
2
3
4
5
6
7
8
9
10
<?php
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $zzz = "...";
?>
<label for="qwe">
<input type="checkbox" id="qwe" value='<?= $zzz ?>' /><?= $row["qwe"] ?></label>
<?php
}
?>
*************************
Вопрос не решился. В базе данных в другом столбце находится строка такого формата: "<a href="">bla bla</a>"
т.е. в дебаге phpstorm'a я получаю:
$row['qwe'] = "<a href="">bla bla</a>"

Даже если заэкранировать слешами кавычки вот так:
PHP
1
$zzz = "<a href=\"\">bla bla</a>"
у меня почему-то не получается запихнуть подобную строку в value input'a:
PHP
1
 value="'.$zzz.'"
Как решить проблему?

Добавлено через 40 минут
Цитата Сообщение от Wolver Посмотреть сообщение
Как решить проблему?
2-й вопрос снят, решил проблему.
HTML5
1
2
<label for="<?php echo htmlspecialchars($row['qwe']); ?>">
<input type="checkbox" id="<?php echo htmlspecialchars($row['qwe']); ?>" value="<?php echo htmlspecialchars($row['qwe']); ?>" /><?php echo htmlspecialchars($row['qwe']); ?></label>
0
19 / 17 / 6
Регистрация: 18.09.2015
Сообщений: 86
13.03.2020, 19:37 4
Цитата Сообщение от Wolver Посмотреть сообщение
у меня почему-то не получается запихнуть подобную строку в value input'a:
Bad code
PHP
1
value="'.$zzz.'"
HTML5
1
<label for="<?php echo htmlspecialchars($row['qwe']); ?>">
Good code
PHP
1
value="{$zzz}"
HTML5
1
<label for="<?=htmlspecialchars($row['qwe'])?>">
А вообще привыкайте писать чистый код, без всяких лишних спец.символов.

PHP
1
2
3
4
5
6
7
8
$foo = 'Foo text';
$bar = 'Bar text';
 
// Good
echo "Это переменная foo:{$foo}, а это bar:{$bar}":
 
// Bad
echo ('Это переменная foo:' . $foo . ', а это bar:' . $bar);
HTML5
1
2
3
4
<!-- Good -->
<label for="<?=htmlspecialchars($row['qwe'])?>">
<!-- Bad -->
<label for="<?php echo htmlspecialchars($row['qwe']); ?>">
Стандарты php 7 уже поддерживают вывод <?=$foo?>
Используйте сокращенную форму! А не старый стандарт. <?php echo $foo; ?>
1
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
13.03.2020, 20:32  [ТС] 5
Цитата Сообщение от Complex138 Посмотреть сообщение
А вообще привыкайте писать чистый код, без всяких лишних спец.символов.
дык если мне надо передать данные из базы в value input'a, а там такая строка, то я тут не при чём))
Что есть, с тем и работаю.
Цитата Сообщение от Complex138 Посмотреть сообщение
Стандарты php 7 уже поддерживают вывод <?=$foo?>
благодарю, про это я знаю, отвлекаясь на основную проблему не поменял на норм код.
Цитата Сообщение от Complex138 Посмотреть сообщение
value="{$zzz}"
А вот это я не знаю. В чём существенная разница относительно value="'.$zzz.'" ? Или это тоже стандарты PHP7?
0
19 / 17 / 6
Регистрация: 18.09.2015
Сообщений: 86
13.03.2020, 23:26 6
Цитата Сообщение от Wolver Посмотреть сообщение
А вот это я не знаю. В чём существенная разница относительно value="'.$zzz.'" ? Или это тоже стандарты PHP7?
Это скорее всего, разрыв html со вставкой php переменной, если это так, то это мой косяк, там ошибка. Лучше использовать <?=$zzz?> т.к при большой строке, в точках можно заблудиться. Еще рекомендую использовать при форматирование таких строк sprintf(), он как раз для таких вещей идеально подходит.
0
2228 / 1275 / 610
Регистрация: 23.08.2015
Сообщений: 3,223
14.03.2020, 00:15 7
Лучший ответ Сообщение было отмечено Wolver как решение

Решение

Это не относится к стандартам php7. Это относится к настройкам сервера, которые поддерживают или не поддерживают сокращенный синтаксис. И такая запись <?= $value ?> На всех серверах включена по умолчанию еще задолго до php7.
А вот к примеру сокращенный синтаксис <? while() : ?> (без php, т.е. должно быть <?php while(): ?>. Такой сокращенный синтаксис далеко не на всех хостингах поддерживается из-за всевозможных конфликтов. И на данный момент крайне не рекомендуется использовать такую запись, хотя активно используется в таких cms как Битрикс. Но там особый случай. Так как битрикс сам по себе очень требователен к настройкам сервера, что даже выделяются хостинги настроенные специально под битрикс и там использование такого сокращенного синтаксиса вполне уместны.

Если мы находимся в контексте html, то уже вместо фигурных скобок нужно использовать синтаксис с двоеточием и end, т.е.

PHP/HTML
1
2
3
4
<?php while($row = $stmt->fetch(PDO::FETCH_ASSOC)): ?>
    <label for="qwe">
    <input type="checkbox" id="qwe" value='<?= $zzz ?>' /><?= $row["qwe"] ?></label>
<?php endwhile ?>
В любом случае обращаться к базе данных посреди html кода - это грубая ошибка. А вместо определения переменной на ходу лучше использовать статические классы - хэлперы.

PHP
1
2
3
4
5
6
7
class MyHelper{
    
    public static function zzz($param) 
    {
        return '...';
    }
}
Итак что у нас должно в идеале получиться. Запрос к БД вынести в область логики формирования данных для вывода.
PHP
1
2
3
4
5
6
7
8
9
<?php
 
$entities = [];
 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    $entities[] = $row;
} 
 
?>
А уже в html коде использовать обычный foreach

PHP/HTML
1
2
3
4
<?php foreach($entities as $entity): ?>
    <label for="qwe">
    <input type="checkbox" id="qwe" value='<?= MyHelper::zzz($entity['myParam']) ?>' /><?= $row["qwe"] ?></label>
<?php endforeach ?>
Как вы уже сделаете - это ваше дело)

Добавлено через 11 минут
Хочу дополнить. что htmlspecialchars никто не отменял. Более того, у htmlspecialchars есть всякие настройки. Стандартный набор
PHP
1
htmlspecialchars($str, ENT_QUOTES | ENT_SUBSTITUTE)
Но чтоб каждый раз такое не писать. Можно также вынести в хэлпер

PHP
1
2
3
4
5
6
7
class Html
{
    public statuc function encode($str)
    {
        return htmlspecialchars($str, ENT_QUOTES | ENT_SUBSTITUTE);
    }
}
Или, если вы не используете классы можно вынести в функцию encode($str);

Добавлено через 6 минут
А еще лично меня учили, что использовать конкатенацию более правильно, так как она быстрее работает и по ряду других причин. И в основном я использую именно ее.
Но это уже скорее вопрос читабельности. Я бы не стал как-то выделять. Что один из способов более правильный. Я склоняюсь, что конкатенация более правильна, но вставки бывают более удобны. Так что использую разные методы в зависимости от ситуации.
2
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
14.03.2020, 00:17  [ТС] 8
Цитата Сообщение от sad67man Посмотреть сообщение
В любом случае обращаться к базе данных посреди html кода - это грубая ошибка. А вместо определения переменной на ходу лучше использовать статические классы - хэлперы.
sad67man, благодарю за комментарий, это понял, переделаю.
Цитата Сообщение от sad67man Посмотреть сообщение
Если мы находимся в контексте html, то уже вместо фигурных скобок нужно использовать синтаксис с двоеточием и end, т.е.
почему? оно же ничем не отличается от скобок цикла. Тем более этот код в .php-файле.
0
2228 / 1275 / 610
Регистрация: 23.08.2015
Сообщений: 3,223
14.03.2020, 00:26 9
Wolver, Технически оно не отличается. Но когда у вас есть всякие вложенности. Где идет цикл, внутри какой-нибудь if/else и т.д. То это не очень читабельно. Когда мы пишем чистый php код, то используем фигурные скобки. А когда мы находимся в контексте html кода, то php играет роль обычного шаблонизатора. И используется конструкция с двоеточием. Просто так принято и все)
1
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
14.03.2020, 01:45  [ТС] 10
Цитата Сообщение от sad67man Посмотреть сообщение
А когда мы находимся в контексте html кода, то php играет роль обычного шаблонизатора. И используется конструкция с двоеточием. Просто так принято и все)
sad67man, меня вполне устраивает такой ответ, благодарю за детальные пояснения!
0
19 / 17 / 6
Регистрация: 18.09.2015
Сообщений: 86
16.03.2020, 05:05 11
Цитата Сообщение от sad67man Посмотреть сообщение
Это не относится к стандартам php7. Это относится к настройкам сервера, которые поддерживают или не поддерживают сокращенный синтаксис. И такая запись <?= $value ?> На всех серверах включена по умолчанию еще задолго до php7.
https://www.php.net/manual/ru/... hptags.php

 
Список изменений
7.0.0 ASP-теги <%, %>, <%=, и теги скриптов <script language="php"> удалены из PHP.
5.4.0 Тег <?= доступен всегда, вне зависимости от настройки short_open_tag.

Прежде чем отвечать, необходимо изучить документацию!
0
2228 / 1275 / 610
Регистрация: 23.08.2015
Сообщений: 3,223
16.03.2020, 09:35 12
Complex138, Не вижу противоречий) В целом я все так и написал. Просто не вдавался в подробности, что это за настройки. Как мы видим это не "стандарт php7". уже с php 5.4 она доступна всегда. Но и на 5.3 такая деректива была всегда включена на всех хостингах.
0
16.03.2020, 09:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2020, 09:35
Помогаю со студенческими работами здесь

проблема с кавычками
На данях столкнулся с проблемой кавычек, а именно: у меня в базу заносятся данные с кавычками,...

Подскажите пожалуйста с кавычками
Доброе утро!Возникла проблема,при написании ядра. У меня есть строка id,login мне нужно,чтобы на...

числа с кавычками в массиве
Здравствуйте! Работая на mathcad у меня возникла проблема. При загрузке в mathcad чисел в виде txt...

Process_start и url с кавычками
Доброго времени суток! Прошу помощи/совета. Суть: необходимо в веб-браузере по умолчанию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru