Основная проблема с конкатенацией PHP? - PullRequest
1 голос
/ 28 ноября 2010
<?php echo ($i % 6 == 5) ? 'style=\"margin-right:0px\"' : ''; ?>

Я просто напечатал style = "" на порте просмотра.

Обновление: Почему нет необходимости избегать двойных кавычек, когда мы внутри строки? Поскольку двойные кавычки никогда не будут восприниматься как строка, если они находятся внутри одинарных кавычек?

Спасибо заранее, MEM

Ответы [ 3 ]

3 голосов
/ 28 ноября 2010

Почему нет необходимости избегать двойных кавычек, когда мы внутри строки?Поскольку двойные кавычки никогда не будут восприниматься как строка, если они находятся внутри одинарных кавычек?

Руководство , касающееся строк в одинарных кавычках:

Чтобы указать буквальную одинарную кавычку, используйте обратную косую черту (\).Чтобы указать буквальный обратный слеш, удвойте его (\\). Все другие экземпляры обратной косой черты будут обрабатываться как буквальная обратная косая черта : это означает, что другие escape-последовательности, к которым вы можете привыкнуть, например, \ r или \ n, будут выводиться буквально, как указано, а не иметь какой-либоособое значение.

2 голосов
/ 28 ноября 2010

Нет необходимости избегать двойных кавычек в одинарных кавычках.

<?php echo ($i % 6 == 5) ? 'style="margin-right:0px"' : ''; ?>

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

$foo = 'a'b';

PHP видит это как строку a, за которой следует бессмысленный b и начало строки ';, которое никогда не заканчивается; неверный синтаксис.

$foo = 'a\'b';

Это правильно анализируется как строка a'b. Вы избежали значения , которое обычно имеет к этому моменту цитата.

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

$foo = 'a"b';  // a"b
$foo = 'a\"b'; // a\"b

Полагаю, проблема в том, как вы смотрите на вывод. Если вывод равен style=\"…\", экранированные двойные кавычки могут вызвать недопустимый синтаксис в среде, в которой вы просматриваете вывод.

2 голосов
/ 28 ноября 2010

Вы использовали одинарные кавычки ' для этой строки, поэтому экранирование двойных кавычек " внутри строки не требуется. Замените это на 'style="margin-right:0px"', и оно должно работать нормально.

Чтобы объяснить, как PHP обрабатывает строки и кавычки немного лучше, полезно узнать разницу между ' и ". Строки, инкапсулированные в ', всегда отображаются как есть. Внутри строки ничего не анализируется, включая любые escape-символы (например, \n для новой строки или экранированных кавычек, за исключением экранированных одинарных кавычек \'). И наоборот, строки, инкапсулированные в ", анализируются, поэтому, если у вас есть escape-символы, они будут отображаться правильно, а если у вас есть какие-либо переменные в строке, они также будут введены. Например,

// Set name variable to my name
$name = "nhinkle";

// Echo hello name with single quotes
echo 'hello {$name}';
// The result will be "hello {$name}"

// Echo hello name with double quotes
echo "hello {$name}";
// The result will be "hello nhinkle"

Для использования одинарных кавычек требуется меньшая вычислительная мощность, поскольку PHP не нужно сканировать строку, чтобы что-либо экранировать, просто нужно найти конец строки. Однако, если вам нужно разобрать вещи внутри строки, обязательно используйте двойные кавычки.

...