php убрать двойные кавычки
Строки и кавычки в PHP
Кавычки в PHP
Строки в PHP помещаются в одинарные или двойные кавычки. Одно из главных отличий в том, что в двойные кавычки можно подставить значение другой переменной:
Как PHP определяет название переменной в строке
В следующем коде PHP неправильно определит название переменной и выдаст ошибку:
Результат в браузере:
Для корректного определения названия переменной нужно поместить её в фигурные скобки:
Нет однозначного мнения, какие кавычки нужно использовать для обычных строк, в которые ничего не нужно подставлять. Однако, многие программисты предпочитают использовать одинарные кавычки.
Экранирование кавычек
Если вам нужно поместить кавычки внутрь строки, есть 2 способа это сделать:
Во втором примере обратный слеш экранирует следующую за ним кавычку, чтобы PHP воспринял её как строку.
Как думаете, что нужно сделать, чтобы вывести на экран только обратный слеш? Ведь он будет экранировать закрывающую кавычку.
Для этого нужно написать второй слеш для экранирования первого:
Табуляция и перенос строки
Обратный слеш в двойных кавычках позволяет не только экранировать символы, но и подставлять некоторые специальные символы. Например, табуляцию (длинный пробел, который вы получаете при нажатии TAB) и перенос строки. Выглядят они следующим образом:
Напомню, что оба этих символа в HTML отображается браузерами как пробел, поэтому нет смысла пытаться вывести их напрямую. Но вы можете вывести их внутри тега textarea или записать в файл:
Задача 1
. Между переменными должен быть пробел.
Задача 2
Выведите этот текст на экран, правильно используя кавычки и экранирование (если это необходимо):
Как убрать запятые между двойными кавычками в PHP
Надеюсь, это будет легко. У меня есть массив со строками, которые содержат вывод из файла CSV. Мне нужно просто удалить все запятые, заключенные в двойные кавычки.
Я спотыкаюсь о регулярных выражениях и испытываю проблемы. Вот мой печальный код:
Всем ОЧЕНЬ большое спасибо.
5 ответов
Оригинальный ответ
Обновление для комментариев
Если цитаты важны для вас, вы можете просто добавить их так:
«3,120», 123, 345, 567 ==> 3120, 123, 345, 567
Вы могли подойти к этому не с той точки зрения.
Вместо того, чтобы удалять запятые из текста (предположительно, чтобы затем можно было разделить строку на запятые, чтобы получить отдельные элементы), как насчет того, чтобы написать что-то, что работает с кавычками?
Найдя вступительную цитату, вы можете проверить оставшуюся часть строки; все, что до следующей цитаты, является частью этого элемента. Вы также можете добавить здесь проверку, чтобы искать экранированные кавычки, например:
Все равно будет правильно читать.
Что ж, я не поленился и написал небольшую функцию, которая сделает именно то, что вам нужно:
Это очень наивный подход, который будет работать только в том случае, если «действительными» запятыми являются те, которые находятся между кавычками, и между ними нет ничего, кроме, возможно, пробелов.
Он должен быть протестирован больше, но в этом случае он работает.
РЕДАКТИРОВАТЬ: исправлены проблемы с удалением пробелов и соседних букв.
Одинарные и двойные кавычки в php-коде
Вы, наверное, заметили, что php-строка обозначается то одинарными, то двойными кавычками. Дело в том, что всё, что находится в одинарных кавычках, интерпретируется просто как последовательность символов, как текст.
Если же php-строка обозначается двойными кавычками, то вместо переменных будут выводиться значения этих переменных. Поэтому если в строке есть переменные, то в качестве внешних кавычек лучше применять двойные кавычки.
Но тогда значения атрибутов html-кода придется заключать в одинарные кавычки. При этом, переменные внутри одинарных кавычек будут продолжать работать, так как снаружи применяются двойные.
Третий уровень кавычек
Если внутри одинарных кавычек нужны вложенные кавычки, то придется использовать двойные, но они уже заняты. Если двойные (или одинарные) кавычки нужно отображать как символы, то предваряйте их обратным слешем, как в следующем примере, для трех строковых параметров JavaScript функции window.open():
Впрочем, можно избавиться от одного уровня кавычек, перейдя на альтернативный синтаксис php-кода.
Атрибуты – в двойных кавычках
По стандартам XHTML значения атрибутов, даже числовые, должны быть заключены в кавычки. Разрешены как двойные, так и одинарные кавычки.
Вы должны только определиться, какой стиль вам больше подходит. Если вы – за чистоту кода страницы, применяйте в атрибутах двойные кавычки. Если вам важнее удобство кодирования, пишите в атрибутах одинарные кавычки, к тому же, одинарная кавычка, в отличие от двойной, пишется с помощью одной клавиши.
PHP. Фееричная расстановка точек над кавычками
По поводу микрооптимизаций PHP путем замены двойных кавычек на одинарные сломано столько копий, что внести свежую струю довольно проблематично. Но я попробую.
В данной статье будет всего один бенчмарк, куда же без него, а основной упор сделан на разбор того, как же оно устроено внутри.
Дисклаймер
Необходимые вводные
Строка в двойных кавычках на этапе компиляции обрабатывается несколько иначе, чем строка в одинарных кавычках.
Одинарные кавычки будут разбираться так:
В статьях про микрооптимизации PHP очень часто встречается совет не использовать print, поскольку он медленнее echo. Давайте посмотрим, как они разбираются.
Т.е. в общем да, echo обнаруживается шагом раньше и этот шаг, надо заметить, довольно тяжелый.
Чтобы по ходу статьи лишний раз не акцентировать внимание, будем держать в голове, что на этапе компиляции двойные кавычки проигрывают одинарным, а print проигрывает echo. Также и не будем забывать, что речь, в худшем случае, про наносекунды.
Ну и чтобы два раза не вставать. Вот diff функций, компилирующих print и echo:
Ну вы поняли — они идентичны по функционалу, но print дополнительно возвращает константу, равную 1. Думаю на этом тему с print можно закрыть и забыть о нем навсегда.
Простая строка, без изысков
Строки echo ‘Some string’; и echo «Some string»; будут разбиты практически идентично на 2(дисклаймер п2) токена.
Причем для одинарных кавычек всегда будет T_CONSTANT_ENCAPSED_STRING, а для двойных — когда как. Если есть пробел в строке, то T_ENCAPSED_AND_WHITESPACE.
Опкоды же будут просты до безобразия и абсолютно идентичны:
Выводы
Если хотите сэкономить пару тактов процессора на этапе компиляции, то, для константных строк, используйте одинарные кавычки.
Динамическая строка
Тут есть 4 варианта.
Для первого варианта:
Для второго (для третьего так же, только вместо точек будут запятые):
А вот с опкодами все будет куда как занимательнее.
Здравый смысл подсказывает, что вариант с `printf` будет проигрывать по скорости первым трем (тем более, что в конце там все тот же ECHO), так что оставим его для задач где нужно форматирование и больше в этой статье вспоминать не будем.
Казалось бы, третий вариант самый быстрый — напечатать последовательно три строки без конкатенаций, странных ROPE и создания дополнительных переменных. Но не все так просто. Функция печати в PHP конечно не Rocket Science, но и отнюдь не банальный Си-шный fputs. Кому интересно — клубок распутывается начиная с php_output_write в файле main/output.c.
CONCAT. Тут все просто — преобразуем, если нужно, аргументы в строки и создаем новую zend_string посредством быстрого memcpy. Единственный минус, что при длинной цепочке конкатенаций на каждую операцию будут создаваться новые строки путем перекладывания одних и тех же байтиков с места на место.
А вот с ROPE_INIT, ROPE_ADD и ROPE_END все сильно интересней. Следим за руками:
3, operands = ‘Hello+’)
Аллоцируем «веревку» из трех слотов(ext), помещаем в слот 0 строку ‘Hello+'(operands) и возвращаем временную переменную
3, ‘%21+Have+a+nice+day%21’)
Помещаем в слот 2(ext) строку ‘%21+Have+a+nice+day%21′(operands), после чего создаем zend_string необходимого размера и копируем в нее по очереди все слоты «веревки» тем же memcpy.
Отдельно стоит заметить, что в случае констант и временных переменных в слоты будут помещаться ссылки на данные, и лишнего копирования происходить не будет.
По-моему, довольно элегантно. 🙂
Давайте побенчмаркаем. В качестве исходных данных возьмем файл zend_vm_execute.h (имхо это будет справедливо) на 71 тысячу строк и попечатаем его разными способами по 100 проходов, дропнув минимум и максимум (каждый замер запускал по 10 раз, выбирая наиболее часто встречающийся вариант):
Что замеряем | Среднее время в секундах |
---|---|
«Веревка» | 0.0129 |
Несколько ECHO | 0.0135 |
Конкатенация | 0.0158 |
printf, для полноты картины | 0.0245 |
Выводы
Заключение
Мне сложно придумать ситуацию, когда может возникнуть потребность в такого рода микрооптимизациях. При выборе того или иного подхода более разумно руководствоваться другими принципами — например, читаемостью кода или принятым в вашей компании стилем кодирования.
Что до меня лично, то мне подход с конкатенациями не нравится из-за вырвиглазного вида, хотя в некоторых случаях он может быть оправдан.
PS Если такого рода разборы интересны — дайте знать — там много чего еще есть, далеко не всегда однозначного и очевидного: массив VS объект, foreach VS while VS for, ваш вариант… 🙂
Небольшое пояснение по итогам чтения комментариев
Синтаксис HEREDOC и «сложные строки»(где переменные в фигурных скобках внутри) — это те же самые строки в двойных кавычках и компилируются абсолютно аналогично.
Кавычки в php
В этой статье я немного расскажу о казалось бы простом-о кавычках.
Кавычки бывают разные-одинарные( ‘ ),двойные( » ) и обратные( ` ).
В операторе include можно использовать двойные кавычки.А например в операторе count их использовать вообще не надо. Помню один мой знакомый начинающий прогер поместил массив в двойные кавычки и пытался после посчитать количество элементов в нём. Естественно-результатом всегда была единица, хотя в массиве было много элеметов.Будьте внимательны в своём коде.
Строку в php можно держать как в одинарных, так и в двойных кавычках. Разница заключается лишь в том, что в двойных кавычках компилятор php будет искать переменные, а в одинарных нет. Что я имею ввиду:
Также можно выносить переменные за кавычки и прикреплять их к строке оператором конкатенации. Тоесть использовать конкатенацию строк. Звучит сложно? На самом деле всё просто. Оператором конкатенации является обычная точка.
Как видите кавычками я просто склеил строки.
Ещё кавычки можно экранировать. Например у нас есть строка в двойных кавычках и нам нужно выделить в ней слово кавычками.Например мы хотим видеть в браузере строку типа Я нахожусь на сайте «php-include.ru», тут здорово. Как мы поступим:
Последняя форма записи наиболее правильная. Потому, как php не ищет в строке переменные-следовательно код отработается быстрее. Но фанатеть от этого не надо. Говорить что остальные формы записи не верны-это всё равно что утверждать Сегодня я встал с левой ноги,и поэтому пришел на работу раньше, чем когда я вставал с правой.
Однако если вы работаете с большими объёмами данных-прирост скорости будет существенней. В пределах нескольких строк данный момент можно проигнорировать.
Обратные кавычки используются в MySQL запросах.Например: