Одинарная кавычка в двойной кавычке

Я прочитал строковую документацию по PHP и обнаружил, что строки в одинарных кавычках будут отображать вещи почти полностью "как есть". Переменные и большинство escape-последовательностей не будут интерпретироваться, кроме \'и \\

Я хотел отобразить гиперссылку, адрес которой должен быть http://localhost/kk/insert.php/?id="4"

я попробовал следующий код

$id = 4;
echo "<a href='http://localhost/kk/insert.php/?id=".$id."'>edit</a>";

Но это отображает http://localhost/kk/insert.php/?id=4 (вокруг 4 нет двойных кавычек)

Тем не менее, я достиг результата с помощью

echo "<a href='http://localhost/kk/insert.php/?id=\"$display_result\"'>edit</a>";

Мой вопрос заключается в том, что одинарные кавычки интерпретируют "escape-символ". Так почему первый код не отображает двойные кавычки (которые помещаются в одинарные кавычки). Что я пропускаю?

4 ответа

Вы не должны иметь кавычки вокруг целого числа. Ваш URL должен бытьhttp://localhost/kk/insert.php/?id=4что достигается с помощью следующего кода:

$id = 4;
echo '<a href="http://localhost/kk/insert.php/?id='.$id.'">edit</a>';

Разница между одинарными и двойными кавычками, которую вы нашли, заключается в следующем

$a = 4;
echo '$a' . "$a"; // $a4
// '$a' just prints `$a`
// "$a" prints `4`, it's interpretted
// alternatively "\$a" prints `$a`

Что касается побега. Если ваш разделитель строк - одинарная кавычка, вам не нужно экранировать двойные кавычки, и наоборот.

$a = "don't";
// vs
$a = 'don\'t';

$a = '"quote"';
// vs
$a = "\"quote\"";

Вы имеете дело с ДВУМЯ языками. PHP делает эхо, и " кавычки анализируются / удаляются PHP. Тогда есть ' кавычки, которые используются в HTML для разделения href приписывать.

С вашей сбежавшей второй версией:

echo "<a href='http://localhost/kk/insert.php/?id=\"$display_result\"'>edit</a>";
     ^--php   ^--html                             ^^--escaped for PHP

Обычно это " до $display_result ПРЕКРАЩАЕТ строку PHP, которую вы повторяете. Но так как это сбежало (\"), escape указывает PHP обрабатывать эту кавычку как открытый текст, а НЕ как кавычку. Таким образом, строка PHP продолжается, и когда этот код действительно выполняется и выводится с вашего сервера, браузер фактически увидит:

<a href='http://localhost/kk/insert.php/?id="XXX"'>edit</a>

Чтобы сделать это с вашим первым примером, просто сделайте:

$id = 4;

echo "<a href='http://localhost/kk/insert.php/?id=\"".$id."\"'>edit</a>";
Другие вопросы по тегам