удалить спецсимволы и пробелы php

Удаление лишних пробелов в PHP.

Обрабатывая информацию, собирая ее из разных источников, например с сайта поставщика, мы часто сталкиваемся с тем, что нам надо ее привести в достойный вид, удалив лишние пробелы.

Удаление пробелов в начале или конце строки.

Удаление лишних пробелов в самом тексте.

Иногда нужно удалить лишние пробелы, а иногда и табы, в самом тексте, например: «Купив телефон сегодня вы получите самый лучший подарок». В этом тексте после каждого слова стоит более 1 пробела, Попробуем заменить лишние через регулярное выражение:

В данном случае \s говорит что надо заменить все пробелы, а + включая табы на 1 пробел. Если вы считаете, что регулярные выражения зло, то можно использовать:

Удаление «не удаляемых» пробелов.

Возможно вы столкнулись с такой проблемой, что ни одно из средств перечисленных выше не удаляет пробелы. Для начала рассмотрите внимательно текст, желательно в исходном коде, потому что текст « Купив телефон сегодня вы получите самый лучший подарок» может оказаться таким: « Купив телефон сегодня вы получите самый лучший подарок». Для начала надо заменить   и просто на пробелы:

А потом, применить один из способов, о котором я писал выше.

Хорошо, это мы сделали, но у нас остались лишние пробелы, которые не удаляются стандартными методами. Вероятнее всего это NO-BREAK SPACE, в таблице utf-8 символов он идет как c2 a0.

удалить спецсимволы и пробелы php. Смотреть фото удалить спецсимволы и пробелы php. Смотреть картинку удалить спецсимволы и пробелы php. Картинка про удалить спецсимволы и пробелы php. Фото удалить спецсимволы и пробелы php

Для начала попробуйте перевести ваш текст в HEX:

и поищите там: c2a0, как видно на скриншоте, у меня аж 2 таких пробела

удалить спецсимволы и пробелы php. Смотреть фото удалить спецсимволы и пробелы php. Смотреть картинку удалить спецсимволы и пробелы php. Картинка про удалить спецсимволы и пробелы php. Фото удалить спецсимволы и пробелы php

Удаление через регулярное выражение:

Удаление без регулярного выражения:

переводим наш текс в HEX, заменяем NO-BREAK SPACE на обычный пробел, переводим обратно в обычный текст, после этого можно сделать замену пробелов и чистку.

Возможно у вас есть свой способ, может более практичный, как исправлять «не удаляемые» пробелы, то поделитесь в комментариях.

Источник

PHP: как удалить все непечатаемые символы в строке?

Я полагаю, что мне нужно удалить символы 0-31 и 127,

есть ли функция или часть кода, чтобы сделать это эффективно.

16 ответов

7 бит ASCII?

если ваша Тардис только что приземлилась в 1963 году, и вы просто хотите 7-битные печатные символы ASCII, вы можете вырвать все из 0-31 и 127-255 с помощью этого:

он соответствует чему-либо в диапазоне 0-31, 127-255 и удаляет его.

8 бит расширенный ASCII?

Ах, добро пожаловать в 21 век. Если у вас есть строка в кодировке UTF-8, то /u модификатор может использоваться в регулярном выражении

это просто удаляет 0-31 и 127. Это работает в ASCII и UTF-8, потому что оба разделяют тот же диапазон набора управления (как отмечено mgutt ниже). Строго говоря, это будет работать без /u модификатор. Но она облегчает жизнь, если вы хотите удалить другие символы.

если вы имеете дело с Unicode, есть потенциально много непечатающих элементов, но давайте рассмотрим простой один: ПРОСТРАНСТВО БЕЗ ПЕРЕРЫВА (U+00A0)

добавление: как насчет str_replace?

preg_replace довольно эффективен, но если вы делаете эту операцию много, вы можете создать массив символов, которые хотите удалить, и использовать str_replace, как отмечено mgutt ниже, например

интуитивно кажется, что это будет быстро, но это не всегда так, вы должны обязательно проверить, если это спасет вас что-нибудь. Я сделал несколько тестов по различным длинам строк с помощью случайные данные, и этот шаблон появился с использованием php 7.0.12

сами тайминги предназначены для 10000 итераций, но что более интересно, это относительные различия. До 512 символов, я видел еще всегда выигрывают. В диапазоне 1-8kb str_replace имел маргинальное ребро.

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

многие другие ответы здесь не учитывают символы юникода (например, öäüßîîûηыეமிᚉ ⠛ ). В этом случае вы можете использовать следующее:

есть странный класс символов в диапазоне \x80-\x9F (чуть выше 7-битного диапазона ASCII символов), которые технически управляют символами, но со временем были неправильно использованы для печати символов. Если у вас нет никаких проблем с этим, то вы можете использовать:

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

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

если вы хотите удалить все, кроме основных символов ASCII для печати (все символы примера выше будут удалены), вы можете использовать:

вы можете использовать классы символов

начиная с PHP 5.2, у нас также есть доступ к filter_var, о котором я не видел никаких упоминаний, поэтому думал, что выброшу его там. Чтобы использовать filter_var для удаления непечатаемых символов 127, вы можете сделать:

фильтр ASCII символов ниже 32

фильтр ASCII символов выше 127

вы также можете html-кодировать низкие символы (новая строка, вкладка и т. д.) во время зачистки высокий:

есть также варианты для зачистки HTML, дезинфекции электронной почты и URL-адресов и т. д. Таким образом, много вариантов для дезинфекции (удаление данных) и даже проверки (возврат false, если он недействителен, а не молча зачистки).

однако по-прежнему существует проблема, что FILTER_FLAG_STRIP_LOW будет удалять новую строку и возврат каретки, которые для textarea являются полностью допустимыми символами. поэтому некоторые ответы регулярных выражений, я думаю, все еще необходимы время от времени, например, после просмотра этого потока, я планирую сделать это для textarea:

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

Источник

PHP: Как удалить все непечатаемые символы в строке?

Мне кажется, мне нужно удалить символы 0-31 и 127,

Есть ли функция или часть кода, чтобы сделать это эффективно.

7 бит ASCII?

Если ваш Тардис просто приземлился в 1963 году, и вам просто нужны 7-битные печатные символы ASCII, вы можете вырвать все из 0-31 и 127-255 с помощью этого:

Он соответствует любому в диапазоне 0-31, 127-255 и удаляет его.

8-разрядный расширенный ASCII?

Вы попали в машину с горячей водой, и вы вернулись в восьмидесятые годы. Если у вас есть форма 8-битного ASCII, вы можете сохранить символы в диапазоне 128-255. Легкая настройка – просто найдите 0-31 и 127

Ах, добро пожаловать в 21-й век. Если у вас есть кодированная строка UTF-8, то модификатор /u может использоваться в регулярном выражении

Добавление: Как насчет str_replace?

preg_replace довольно эффективен, но если вы много делаете эту операцию, вы можете создать массив символов, которые хотите удалить, и использовать str_replace, как указано ниже в mgutt, например

Интуитивно это похоже на то, что это будет быстро, но это не всегда так, вы должны определенно проверить, не спасет ли он вас. Я сделал несколько тестов по длинным строкам со случайными данными, и эта картина возникла с использованием php 7.0.12

Сами тайминги рассчитаны на 10000 итераций, но более интересными являются относительные различия. До 512 символов, я всегда видел preg_replace. В диапазоне 1-8kb у str_replace был крайний край.

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

Многие другие ответы здесь не учитывают символы Юникода (например, öäüßйȝîûηы ე மி ᚉ ⠛). В этом случае вы можете использовать следующее:

Есть странный класс символов в диапазоне \x80-\x9F (чуть выше 7-битного диапазона символов ASCII), которые являются технически управляющими символами, но со временем были неправильно использованы для печатных символов. Если у вас нет проблем с этим, вы можете использовать:

Если вы хотите также разбить линии, возврат каретки, вкладки, неразрывные пробелы и мягкие дефисы, вы можете использовать:

Обратите внимание, что для приведенных выше примеров вы должны использовать одинарные кавычки.

Если вы хотите удалить все, кроме основных печатных символов ASCII (все символы вышеприведенных символов будут удалены), вы можете использовать:

вы можете использовать классы символов

Начиная с PHP 5.2, у нас также есть доступ к filter_var, в котором я не видел упоминания о том, что я бы выбрал его там. Чтобы использовать filter_var для удаления символов, не подлежащих печати 127, вы можете:

Фильтровать символы ASCII ниже 32

Фильтровать символы ASCII выше 127

Вы также можете html-кодировать нижние символы (новая строка, вкладка и т. Д.) При высокой степени сжатия:

Существуют также варианты удаления HTML, дезинфекции сообщений электронной почты и URL-адресов и т. Д. Таким образом, множество параметров для дезинфекции (вычеркивание данных) и даже проверка (возврат false, если не действительный, а не молчащий отрыв).

Тем не менее, по-прежнему существует проблема, что FILTER_FLAG_STRIP_LOW будет лишать строки новой строки и возврата каретки, которые для текстового поля являются полностью допустимыми символами … поэтому некоторые из ответов Regex, по-моему, по-прежнему необходимы порой, например, после просмотра этого thread, я планирую сделать это для textareas:

Это кажется более читаемым, чем ряд регулярных выражений, разделенных цифровым диапазоном.

Все решения работают частично, и даже ниже, вероятно, не распространяется на все случаи. Моя проблема заключалась в попытке вставить строку в таблицу utf8 mysql. Строка (и ее байты) соответствовала utf8, но имела несколько плохих последовательностей. Я предполагаю, что большинство из них были контролем или форматированием.

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

Моя совместимая с UTF-8 версия:

Вы можете использовать обычный экспресс, чтобы удалить все, кроме тех символов, которые вы хотите сохранить:

Заменяет все, что не (^) буквы AZ или az, числа 0-9, пробел, подчеркивание, hypen, plus и амперсанд – ни с чем (т.е. удаляют его).

Это приведет к удалению всех управляющих символов ( http://uk.php.net/manual/en/regexp.reference.unicode.php ), оставляя символы \n символов новой строки. По моему опыту, управляющие символы – это те, которые чаще всего вызывают проблемы с печатью.

Но, наконец, было важно не удалять 128-255, потому что, например, chr(128) ( \x80 ) является знаком евро в 8-битном ASCII, а многие шрифты UTF-8 в Windows отображают знак евро и Android в отношении моего собственного теста.

Вместо этого используйте это, чтобы удалить непечатаемые символы 0-31 и 127:

Самая быстрая медленная альтернатива¹ без использования регулярных выражений:

¹ Протестировано @PaulDixon и проверено мной.

дает мне полный контроль над тем, что я хочу включить

Отмеченный anwser совершенен, но он пропускает характер 127 (DEL), который также является неприменимым персонажем

«cedivad» решил проблему для меня с настойчивым результатом шведских символов ÄÄÖ.

Это сработало для меня. Я должен был преобразовать строку любого типа, которая была случайным заголовком в пул для SEO.

Источник

Популярные примеры работы регулярных выражений в PHP

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

Примеры preg_replace PHP

1. Удаляем определённую ссылку в переменной text

2. Удаляем комментарии в переменной text

3. Удаляем спецсимволы

4. Удаляем всё, что между

5. Удаляем всё, что между

6. Удаляем конкретные символы из строки

7. Удаляем пробелы по бокам строки и обычные пробелы

8. Удаляем лишние переводы строк и переносы

9. Удаляем расширения в названиях файлов

10. Создаём функцию обработки текста

11. Найти содержимое определённого тега и вставить его в другие теги

13. Добавить или убрать текст в начале или конце переменной с текстом

14. Находим все http:// и заменяем на ссылки

15. Удаление GET-параметров из URL

16. Добавить тег br в начало или конец строк

17. Как конвертировать html в текст

18. Как разобрать email и сделать ссылку

Примеры preg_match PHP

1. проверка mail адреса на корректность

2. Найти mail адреса в тексте

3. Является ли переменная числом, длиной от 13 до 16 символов (проверка кредитной карты)

4. Проверка имени файла

5. Ищем в тексте мобильные телефоны РФ

6. Состоит ли строка только из букв, цифр и _, длиной от 8 до 20 символов:

7. Есть ли в строке идущие подряд символы, не менее 3-х символов подряд (типа абвгДДДеё, но не ааббаабб):

8. Поиск в разных частях строки конструкции:

9. Проверки на тип браузера. Возвращает true если browser = Netscape 2, 3 or MSIE 3.

Примеры ereg PHP

1. Проверка mail адреса в тексте

Источник

как удалить специальные символы в строке

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

отобрал поле с бд где есть проблема.
наверху при просмотре исходного кода в фф, внизу в notepade.

Перед тем как добавлять строки в document.xml я пропускаю их через htmlspecialchars. подскажите как выявить удалить подобные символы.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как удалить все специальные символы?
Как удалить все специальные символы?Вроде : o♂╝♥☻☺.Удалить из строки?

Удалить символы в строке, стоящие на четных местах; удалить лишние пробелы и знаки табуляции в строке, заменив одним пробелом
Надо удалить символы в строке, стоящие на четных местах. И удалить лишние пробелы и знаки табуляции.

Как убирать специальные символы в ASP?
Подскажите как убирать специальные символы в ASP при обработке форм?

Как удалить повторяющиеся символы в строке?
Есть необычная задача. Переменная с набором символов, как вырезать все повторяющиеся символы.

наверху при просмотре исходного кода в фф, внизу в notepade.

У меня получаются проверки на англ.символы, цифры, спец. символы.
А для русских букв никак не получает написать регексп.

// row
Input x,yIF ХлУлlt; AND Xgt; OR. Xgt; print «п�инадлежи�» ELSE print «не п�инадлежи�» п�иводи� к появлени� на �к�ане �лова «П�инадлежи�», п�ед��авляе� �обой

в html коде вместо одного неизвестного символа получили много символов с вопросиками.
изначально был только один спец.символ US в notepade++

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как в строке удалить все символы начиная справа до определенного?
Вот например такая строка (Это только пример): String s=»Okulele\Random4eg»;Как мне удалить.

Как удалить лишние пробелы, переносы и экранировать символы в строке?
на вход приходит строка. нужно в любой приходящей строке удалять переносы на следующую строку.

Алфавит. Символы операций. Специальные символы
Алфавит. Символы операций. Специальные символы. Один из вопросов билета, предстоящего мне.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *