Удалить кавычки из начала и конца строки в PHP
Мне нужно избавиться от » (двойных кавычек) в конце и в начале, если они существуют, но если в String есть такой символ, тогда он должен быть оставлен. Пример:
7 ответов
Если второй символ также » ‘или предпоследний тоже, то он также будет удален. Если они значительны, то обрезка падает. Это немного зависит от фактических данных. См. Ответ пользователя 783322.
Проще говоря: «trim () удалит последовательные кавычки с начала или с конца. Однако мы просто хотим удалить только самые первые и самые последние кавычки. Это означает, что это не должно быть приемлемым ответом.
Это не должно быть принятым ответом. Что если цитата является частью строки? «this is double-quote -> «» выведет this is double-quote -> что означает, что вы пропустили неотъемлемую часть строки.
У меня была аналогичная потребность и я написал функцию, которая удалит лидирующие и завершающие одиночные или двойные кавычки из строки:
/** * Remove first and end quote from a quoted string of text * * @param mixed $text */ function stripQuotes($text) < $unquoted = preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $text); return $unquoted; >
Это приведет к выводам, перечисленным ниже:
Input text Output text -------------------------------- No quotes => No quotes "Double quoted" => Double quoted 'Single quoted' => Single quoted "One of each' => "One of each' "Multi""quotes" => Multi""quotes '"'"@";'"*&^*'' => "'"@";'"*&^*'
trim удалит все экземпляры char с начала и конца, если он соответствует шаблону, который вы предоставляете, поэтому:
$myValue => '"Hi"""""'; $myValue=trim($myValue, '"');
Здесь можно удалить только первый и последний char, если они совпадают:
$output=stripslashes(trim($myValue)); // if the first char is a " then remove it if(strpos($output,'"')===0)$output=substr($output,1,(strlen($output)-1)); // if the last char is a " then remove it if(strripos($output,'"')===(strlen($output)-1))$output=substr($output,0,-1);
Так как этот поток должен был быть убит давно, я не мог не ответить тем, что я назвал бы самым простым ответом. Я заметил, что эта тема вновь появляется на 17-м, поэтому я не чувствую себя так же плохо.:)
Использование образцов, предоставленных Стивом Чемберсом;
Input text Output text -------------------------------- No quotes => No quotes "Double quoted" => Double quoted 'Single quoted' => Single quoted "One of each' => One of each "Multi""quotes" => Multi""quotes '"'"@";'"*&^*'' => "'"@";'"*&^*'
Это только когда-либо удаляет первую и последнюю цитату, она не повторяется, чтобы удалить дополнительный контент и не заботится о совпадении концов.
Если вам нравится производительность по ясности, это способ:
// Remove double quotes at beginning and/or end of output $len=strlen($output); if($output[0]==='"') $iniidx=1; else $iniidx=0; if($output[$len-1]==='"') $endidx=-1; else $endidx=$len-1; if($iniidx==1 || $endidx==-1) $output=substr($output,$iniidx,$endidx);
Комментарий помогает с ясностью. скобки в массиве, как использование в строках, возможно и требуют меньше усилий по обработке, чем эквивалентные методы, слишком плохо, что нет переменной длины или последнего индекса char
Я понимаю, что OP не спрашивал о многобайтовых строках, но это не будет работать с такими строками. Не нужно использовать Regex, но они делают это довольно просто.
Как насчет регулярного выражения
//$singleQuotedString="'Hello this 'someword' and \"somewrod\" stas SO"; //$singleQuotedString="Hello this 'someword' and \"somewrod\" stas SO'"; $singleQuotedString="'Hello this 'someword' and \"somewrod\" stas SO'"; $quotesFreeString=preg_replace('/^\'?(.*?(?=\'?$))\'?$/','$1' ,$singleQuotedString);
Hello this 'someword' and "somewrod" stas SO
Вам нужно использовать регулярные выражения, посмотрите: —
Или вы могли бы в этом случае использовать substr, чтобы проверить, является ли первый, а затем последний символ строки меткой кавычки, если она есть, усечь строку.
Trim может в конечном итоге удалить существенные кавычки в начале или конце строки — я поддерживаю регулярные выражения!
Проще говоря: «trim () удалит последовательные кавычки с начала или с конца. Однако мы просто хотим удалить только самые первые и самые последние кавычки.
Ещё вопросы
- 0 Определить закрытие входа в Facebook с помощью кнопки «X»
- 1 Как найти все клики в списке ребер
- 1 Какой фильтр для кодирования PNG чересстрочной с использованием компонентов обработки изображений Windows (WIC) с оболочкой C #?
- 0 Как экспортировать запрос в mysql в файл .sql?
- 1 jaxb — отношения многие ко многим
- 0 r-mysql: используйте переменную r для извлечения столбца из базы данных
- 0 Обработка выражения вне повторения в ng-классе
- 0 jQuery и AngularJS не работают вместе. Работает ли сборщик даты и времени jQuery или работает угловой расчет
- 0 Типы функций PHP-функций — одновременное использование атрибутов contentType и type не поддерживается
- 1 MVC Linq OrderBy не сохраняется в Razor View
- 0 Увеличение строк в базе данных
- 1 Бесконечный цикл с обновленным атрибутом внутри события изменения базовой модели
- 0 Cron Job PHP Foreach отправляет только одну электронную почту / запускает одну строку
- 0 Код вставки mysql выдал следующую ошибку: Не все параметры были использованы в операторе SQL
- 1 Как открыть разговор в WhatsApp на определенный номер с намерением
- 0 Как я могу заполнить выпадающий список в JQuery
- 1 Обнаружение арабских символов в регулярных выражениях
- 1 Altbeacon 2.16.1 не может сканировать маяки с определенным кодом типа маяка
- 0 Фильтрация изотопов — без результатов
- 0 Ошибка при использовании STXXL Autogrow
- 0 Показать ссылку в jquery datagrid
- 0 PHP mysqli не может распознать SSL-сертификаты для удаленной базы данных
- 1 Разделительная строка, если найден разделитель
- 1 FirebaseApp по умолчанию не инициализируется в процессе (Ошибка)
- 0 Сохраните отфильтрованный список перед применением другого фильтра с помощью ng-repeat
- 0 jQuery добавление новых свойств в JavaScript DOM Object
- 0 Я новичок в веб-браузере Android и использую JavaScript
- 1 Этот код дает мне ошибку несовместимых типов. Он говорит, что требуется сканер, но обнаружил строку. Я не понимаю, как я могу это исправить
- 1 отображение списка возможностей программы
- 0 Symfony 2.5.6 — исключение UnexpectedTypeException в пользовательском типе формы
- 1 Хранение данных датчика и дамп файла событий на Android
- 0 jQuery Удалить часть HTML и добавить новый HTML
- 0 Как связать статическую библиотеку C ++ с PHP?
- 1 Как изменить цвет легенды в чартах и добавить еще одну легенду?
- 1 Уникальный идентификатор Firebase для каждой учетной записи пользователя
- 1 Почему я вижу красный крест над index.jsp?
- 0 Помещение виртуальных функций в структуру
- 0 Выравнивание поля ввода и текстовые эффекты при выравнивании
- 1 Полимер 2.0 Edge Issue
- 1 Firebase: убедитесь, что данные были переданы в Firebase перед запуском остальной части скрипта
- 0 C ++: создание класса для содержания различных типов
- 1 Полимер служит для изменения обслуживаемых файлов JavaScript для Internet Explorer 11. Как заставить его работать на другом веб-сервере?
- 1 Изменение семейства шрифтов в OpenCV Python с использованием PIL
- 1 Ищет наличие составного ключа в трех DataFrames и соответственно объединяет DataFrames
- 1 как я могу получить доступ к переменной в блоке try в другом блоке try?
- 0 JQuery селектор, чтобы игнорировать элемент?
- 1 Как изменить статус релиза продукта на альфа / бета приложение для Android в Google Play
- 1 subprocess и psutil: как получить список из subprocess.check_output?
- 1 Экспорт таблицы Excel с сервера в JavaScript
- 1 Объедините несколько строк кода C # для краткости или отдельно для ясности
Php убрать кавычки из строки
При использовании одного из этих фильтров в качестве фильтра по умолчанию либо через ваш ini-файл, либо через конфигурацию веб-сервера, флаги по умолчанию установлены в значение FILTER_FLAG_NO_ENCODE_QUOTES . Вам необходимо явно установить параметру filter.default_flags значение 0 для наличия пустых кавычек по умолчанию. К примеру:
Пример #1 Настройка фильтра по умолчанию для работы аналогично функции htmlspecialchars
Список изменений
Версия | Описание |
---|---|
8.1.0 | Константа FILTER_SANITIZE_STRING и FILTER_SANITIZE_STRIPPED объявлены устаревшими. |
8.0.0 | Удалена FILTER_SANITIZE_MAGIC_QUOTES . |
7.3.0 | Добавлена FILTER_SANITIZE_ADD_SLASHES для замены FILTER_SANITIZE_MAGIC_QUOTES |
7.3.0 | FILTER_SANITIZE_MAGIC_QUOTES объявлена устаревшей. |
User Contributed Notes 15 notes
FILTER_SANITIZE_STRING doesn’t behavior the same as strip_tags function. strip_tags allows less than symbol inferred from context, FILTER_SANITIZE_STRING strips regardless.
$smaller = «not a tag < 5" ;
echo strip_tags ( $smaller ); // -> not a tag < 5
echo filter_var ( $smaller , FILTER_SANITIZE_STRING ); // -> not a tag
?>
Remember to trim() the $_POST before your filters are applied:
// We trim the $_POST data before any spaces get encoded to «%20»
// Trim array values using this function «trim_value»
function trim_value (& $value )
$value = trim ( $value ); // this removes whitespace and related characters from the beginning and end of the string
>
array_filter ( $_POST , ‘trim_value’ ); // the data in $_POST is trimmed
$postfilter = // set up the filters to be used with the trimmed post array
array(
‘user_tasks’ => array( ‘filter’ => FILTER_SANITIZE_STRING , ‘flags’ => ! FILTER_FLAG_STRIP_LOW ), // removes tags. formatting code is encoded — add nl2br() when displaying
‘username’ => array( ‘filter’ => FILTER_SANITIZE_ENCODED , ‘flags’ => FILTER_FLAG_STRIP_LOW ), // we are using this in the url
‘mod_title’ => array( ‘filter’ => FILTER_SANITIZE_ENCODED , ‘flags’ => FILTER_FLAG_STRIP_LOW ), // we are using this in the url
);
$revised_post_array = filter_var_array ( $_POST , $postfilter ); // must be referenced via a variable which is now an array that takes the place of $_POST[]
echo ( nl2br ( $revised_post_array [ ‘user_tasks’ ])); //— use nl2br() upon output like so, for the [‘user_tasks’] array value so that the newlines are formatted, since this is our HTML field and we want to maintain newlines
?>
To include multiple flags, simply separate the flags with vertical pipe symbols.
For example, if you want to use filter_var() to sanitize $string with FILTER_SANITIZE_STRING and pass in FILTER_FLAG_STRIP_HIGH and FILTER_FLAG_STRIP_LOW, just call it like this:
$string = filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);
The same goes for passing a flags field in an options array in the case of using callbacks.
$var = filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS,
array(‘flags’ => FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH));
Thanks to the Brain Goo blog at popmartian.com/tipsntricks/for this info.
Although it’s specifically mentioned in the above documentation, because many seem to find this unintuitive it’s worth pointing out that FILTER_SANITIZE_NUMBER_FLOAT will remove the decimal character unless you specify FILTER_FLAG_ALLOW_FRACTION:
echo filter_var ( $number_string , FILTER_SANITIZE_NUMBER_FLOAT ); // 1234
echo filter_var ( $number_string , FILTER_SANITIZE_NUMBER_FLOAT , FILTER_FLAG_ALLOW_FRACTION ); // 12.34
?>
It’s not entirely clear what the LOW and HIGH ranges are. LOW is characters below 32, HIGH is those above 127, i.e. outside the ASCII range.
$a = «\tcafé\n» ;
//This will remove the tab and the line break
echo filter_var ( $a , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_LOW );
//This will remove the é.
echo filter_var ( $a , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH );
?>
Please be aware that when using filter_var() with FILTER_SANITIZE_NUMBER_FLOAT and FILTER_SANITIZE_NUMBER_INT the result will be a string, even if the input value is actually a float or an int.
Use FILTER_VALIDATE_FLOAT and FILTER_VALIDATE_INT, which will convert the result to the expected type.
Just to clarify, since this may be unknown for a lot of people:
ASCII characters above 127 are known as «Extended» and they represent characters such as greek letters and accented letters in latin alphabets, used in languages such as pt_BR.
A good ASCII quick reference (aside from the already mentioned Wikipedia article) can be found at: http://www.asciicodes.com/
Here is a simpler and a better presented ASCII list for the <32 or 127>filters
(if wikipedia confused the hell out of you):
32>