Строки в PHP обрамляются одинарными или двойными кавычками. Главное различие в том, что в двойные кавычки можно подставить переменную:
Теперь мы можем придумать ещё одно решение задачи из урока Переменные в PHP :
$title"; echo "
Как PHP находит переменную в строке?
Всё просто. Помните, какие символы могут использоваться в названии переменной? Это цифры, буквы и подчёркивание _ .
Вот PHP и принимает за название всё, что находится между символом $ и первым запрещённым символом.
В следующем коде PHP неправильно определит название переменной и выдаст ошибку:
Результат в браузере:
Notice: Undefined variable: priceруб in D:\OpenServer\domains\сайт\index.php on line 3
Чтобы PHP правильно определил название переменной в строке, нужно поместить её в фигурные скобки {} :
Результат в браузере:
1499руб
Нет однозначного мнения, какие кавычки нужно использовать для обычных строк, в которые ничего не нужно подставлять. Однако, многие программисты предпочитают использовать одинарные кавычки.
Дело в том, что двойные кавычки у многих вызывают ассоциацию "в эту строку что-то должно подставляться". Поэтому я рекомендую использовать одинарные кавычки для обычного текста, а двойные - только когда в текст нужно подставить переменную. Пример:
Экранирование кавычек
Если вам нужно поместить кавычки внутрь строки, есть 2 способа это сделать:
Во втором примере обратный слеш \ экранирует следующую за ним кавычку, чтобы PHP воспринял её как строку.
Как думаете, что нужно сделать, чтобы вывести на экран только обратный слеш? Ведь он будет экранировать закрывающую кавычку. Забавно, но нужно написать второй слеш для экранирования первого:
Табуляция и перенос строки в двойных кавычках
Обратный слеш в двойных кавычках позволяет экранировать не только кавычки и самого себя, но и некоторые другие символы. Наиболее популярные из них - это табуляция (длинный пробел, который вы получаете при нажатии TAB) и перенос строки. Выглядят они следующим образом:
Напишите скрипт, который:
1. Создаёт переменную $type
со значением Игра
.
2. Создаёт переменную $name
со значением "World of Warcraft"
(с кавычками).
3. Выводит обе переменные внутри тега
. Между переменными должен быть пробел.
В этой краткой статье показано, как и где стоит использовать кавычки в PHP .
Одинарные кавычки (апострофы) в PHP
Строки, заключенные в одинарные кавычки, никак не обрабатываются PHP. То есть одинарные кавычки представляют текст, заключенный между ними, как есть.
// Правильно echo "Как жизнь?"; echo "Как жизнь? $name"; echo "Как жизнь? ".$name; // Неправильно echo "Как жизнь? $name";
Специальные символы в одинарных и двойных кавычках
Чтобы, например, символ табуляции (\t) интерпретировался как символ табуляции, а не как слеш и буква t, необходимо заключать строку с текстом, в которой содержится символ табуляции, в двойные кавычки. В одинарных кавычках можно использовать только \’ и \\ . Все остальные экранирующие последовательности (\n , \r , \$ и т.д.) недопустимо использовать в одинарных кавычках.
// Неправильно echo "Как жизнь? \n"; // Правильно echo "Как жизнь? \n";
Чтобы экранировать двойные кавычки внутри строки, поставьте кавычки перед обратным слэшем \" .
// Неправильно echo "
Как жизнь?
"; // Правильно echo "Как жизнь?
"; echo "Как жизнь?
";Двойные кавычки в PHP
Текст, заключенный в двойные кавычки, обрабатывается совсем по-другому. Например, переменные, заключенные в двойные кавычки, заменяются на их значения. Это делает удобным составлять SQL запросы при помощи двойных кавычек.
$query = "INSERT INTO table (post,author,text,date) VALUES ("$id","$author","$text","$date")";
2007.11.08 16:07
Столкнулся с проблемой автоматического добавления кавычек в PHP при вводе информации в базу данных.
Немного покопавшись в интернете обнаружил, что проблему можно решить, изменив настройки сервера с помощью директив в.htaccess: magic_quotes_gpc и magic_quotes_runtime.
Говорят (и я этому даже верю), что разработчики языка php, будучи не в силах заставить основную массу php-программистов писать качественный код, решили позаботиться о безопасности наших СУБД и ввели автоматическое добавление слэшей перед спецсимволами. Слэши добавляются на основании директив php.ini (magic_quotes_gpc и magic_quotes_runtime).
Директивы имеют общее название "волшебные кавычки", я же зову их “адские кавычки”. Действительно, в грамотно написанном приложении необходимость в автоматическом закавычивании отсутствует, более того: лишние кавычки мешают, и их приходится удалять.
Первая директива - magic_quotes_gpc - означает, что PHP автоматически добавляет слэши к данным, пришедшим от пользователя - из POST-, GET-запросов и cookies. Вторая переменная - magic_quotes_runtime - означает, что слэши добавляются к данным, полученным во время исполнения скрипта - например, из файла или базы данных. Так, некоторые функции, представляющие подобную информацию, выполняют ее закавычивание.
Если вы хотите отказаться от столь навязчивого сервиса, то либо вы (в той редкой и счастливой ситуации, когда вы полновластный владелец сервера) в файле php.ini отключаете эти конфигурационные переменные, либо (если вы, конечно, не размещаете сайт на бесплатном хостинге) вы можете внести изменения в файл.htaccess. Это файл, в котором находятся локальные - для одного каталога, а не для всего сервера - настройки apache. И добавьте в него следующие строки.
Учитывая строку в python, такую как:
S = "This sentence has some "quotes" in it\n"
Я хочу создать новую копию этой строки с любыми экранированными кавычками (для дальнейшего использования в Javascript). Так, например, я хочу это сделать:
"This sentence has some \"quotes\" in it\n"
Я попытался использовать replace() , такие как:
S.replace(""", "\"")
но возвращает ту же строку. Итак, я попробовал это:
S.replace(""", "\\"")
но возвращает двойные экранированные кавычки, такие как:
"This sentence has some \\"quotes\\" in it.\n"
Как заменить " с \" ?
ОБНОВИТЬ:
Мне нужно в качестве вывода из этого текста для копирования, который показывает как кавычки, так и новые строки как экранированные. Другими словами, я хочу иметь возможность копировать:
"This sentence has some \"quotes\" in it.\n"
Если я использую необработанную строку и print в результате я получаю правильно экранированную цитату, но экранированная новая строка не печатает. Если я не использую print то я получаю свои новые строки, но с двойными экранами. Как я могу создать строку, которую я могу скопировать, которая отображает обе строки и цитату?
2017-09-19 05:09
Ответы:
Привет, обычно при работе с Javascript я использую модуль json, предоставляемый Python. Это позволит избежать строки, а также множество других вещей, как указал user2357112.
Import json string = "This sentence has some "quotes" in it\n" json.dumps(string) #gives you ""This sentence has some \\"quotes\\" in it\\n""
2017-09-19 05:33
Ваша вторая попытка правильная, но вы сбиты с толку разницей между repr и str строки. Более идиоматический способ сделать второй способ - использовать «сырые строки»:
>>> s = "This sentence has some "quotes" in it\n" >>> print s This sentence has some "quotes" in it >>> print s.replace(""", r"\"") # raw string used here This sentence has some \"quotes\" in it >>> s.replace(""", r"\"") "This sentence has some \\"quotes\\" in it\n"
Необработанные строки - WYSIWYG: обратные косые черты в исходной строке - всего лишь один символ. Это - как вы обнаружили - легко путать иначе;-)
Печать строки (второй вывод выше) показывает, что она содержит нужные вам символы.
Без print (последний вывод выше), Python неявно применяется repr() до значения перед его отображением. Результатом является строка, которая создавала бы оригинал, если бы Python должен был ее оценить. Вот почему в последней строке зазоры удваиваются. Они не находятся в строке, но необходимы, чтобы, если Python должен был их оценивать каждый \\ станет одним из \ в результате.
(PHP 4, PHP 5, PHP 7)
addcslashes — Quote string with slashes in a C style
Description
addcslashes (string $str , string $charlist ) : string
Returns a string with backslashes before characters that are listed in charlist parameter.
Parameters
The string to be escaped.
Charlist
A list of characters to be escaped. If charlist contains characters \n , \r etc., they are converted in C-like style, while other non-alphanumeric characters with ASCII codes lower than 32 and higher than 126 converted to octal representation.
When you define a sequence of characters in the charlist argument make sure that you know what characters come between the characters that you set as the start and end of the range.
echo
addcslashes
("foo"
,
"A..z"
);
// output: \f\o\o\[ \]
// All upper and lower-case letters will be escaped
// ... but so will the [\]^_`
?>
Also, if the first character in a range has a higher ASCII value than the second character in the range, no range will be constructed. Only the start, end and period characters will be escaped. Use the ord() function to find the ASCII value for a character.
echo
addcslashes
("zoo["."]"
,
"z..A"
);
// output: \zoo["\."]
?>
Be careful if you choose to escape characters 0, a, b, f, n, r, t and v. They will be converted to \0, \a, \b, \f, \n, \r, \t and \v, all of which are predefined escape sequences in C. Many of these sequences are also defined in other C-derived languages, including PHP, meaning that you may not get the desired result if you use the output of addcslashes() to generate code in those languages with these characters defined in charlist .