Начало PhP: защищать котировки

0

Я Php n00b. Я читаю онлайн-учебник, но у меня уже вопрос (очень простой вопрос, я полагаю):

Я не понимаю, почему следующий код работает правильно:

<html>
    <head>
        <title> My Firts PHP page </title>
    </head>
    <body>
        <?php
            $userAgent = $_SERVER["HTTP_USER_AGENT"];
            echo "<p>This is my awesome User Agent: <b>\"$userAgent\"</b></p>";
        ?>
    </body>
</html>

и вместо этого следующее не работает, хотя я защищаю кавычки внутри скобок:

<html>
    <head>
        <title> My Firts PHP page </title>
    </head>
    <body>
        <?php
            echo "<p>This is my awesome User Agent: <b>$_SERVER[\"HTTP_USER_AGENT\"]</b></p>";
        ?>
    </body>
</html>

Заранее спасибо.

  • 0
    Что не работает с этим? Выдает ошибку? Разве он не выводится полностью?
  • 3
    Для чего бы это ни стоило, часто лучше не смешивать переменные со строковыми литералами. Это делает ваш код реальной болью для чтения
Показать ещё 2 комментария
Теги:
double-quotes

4 ответа

2
Лучший ответ

Вы в основном нашли краевой случай интерполяции строк. В то время как алфавитно-цифровые ключи массива должны быть указаны в PHP, в строках с двойными кавычками они должны быть не кавычками:

echo "<p>This is my awesome User Agent: <b>$_SERVER[HTTP_USER_AGENT]</b></p>";

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

  • 1
    лучший способ сделать это
2

Вы можете попробовать один из них:

Кудрявая скобка позволяет создавать сложные выражения внутри строк

<html>
    <head>
        <title> My Firts PHP page </title>
    </head>
    <body>
        <?php
            echo "<p>This is my awesome User Agent: <b>{$_SERVER[\"HTTP_USER_AGENT\"]}</b></p>";
        ?>
    </body>
</html>

еще лучше, просто используйте php для части, которую вы выводите.

<html>
    <head>
        <title> My Firts PHP page </title>
    </head>
    <body>
        <p>This is my awesome User Agent: <b><?php echo $_SERVER["HTTP_USER_AGENT"]; ?></b></p>
    </body>
</html>
1

Неправильное использование котировок escapinng. Смотрите и проверьте:

echo "<p>This is my awesome User Agent: <b>". $_SERVER["HTTP_USER_AGENT"] ."</b></p>";
0

Вы можете включить переменную в строку следующим образом:

echo "<p>This is my awesome User Agent: <b>{$_SERVER["HTTP_USER_AGENT"]}</b></p>";

Это лучше и чище, если вы использовали

echo "<p>This is my awesome User Agent: <b>". $_SERVER["HTTP_USER_AGENT"] ."</b></p>";

Или без одинарных кавычек в ключе массива

echo "<p>This is my awesome User Agent: <b>$_SERVER[HTTP_USER_AGENT]</b></p>";
  • 0
    Я могу включить переменную в строку также без скобок. Может быть, только если это «простая» переменная. Я могу сделать что-то вроде: echo "Меня зовут $ name $ фамилия"; без ошибок

Ещё вопросы

Сообщество Overcoder
Наверх
Меню