Одинарная кавычка в двойной кавычке
Я прочитал строковую документацию по 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>";