PHP: как удалить все непечатаемые символы в строке?
есть ли функция или часть кода, чтобы сделать это эффективно.
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)
в строке UTF-8 это будет закодировано как 0xC2A0 . Вы можете искать и удалять эту конкретную последовательность, но с помощью /u модификатор на месте, вы можете просто добавить \xA0 персонаж класс:
добавление: как насчет 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, вы можете сделать:
вы также можете html-кодировать низкие символы (новая строка, вкладка и т. д.) во время зачистки высокий:
есть также варианты для зачистки HTML, дезинфекции электронной почты и URL-адресов и т. д. Таким образом, много вариантов для дезинфекции (удаление данных) и даже проверки (возврат false, если он недействителен, а не молча зачистки).
однако по-прежнему существует проблема, что FILTER_FLAG_STRIP_LOW будет удалять новую строку и возврат каретки, которые для textarea являются полностью допустимыми символами. поэтому некоторые ответы регулярных выражений, я думаю, все еще необходимы время от времени, например, после просмотра этого потока, я планирую сделать это для textarea:
Это кажется более читаемым, чем ряд регулярных выражений, которые были удалены числовой диапазон.
[expert_bq id=»1570″]МАКС ОСТАТ ПСТР ТЕКСТ A1;n0 ;12;1 1 ; z ; ДЛСТР A1 -ДЛСТР МАКС ЕСЛИОШИБКА ПРАВСИМВ A1;ДЛСТР A1 -ДЛСТР МАКС ЕСЛИОШИБКА на форуме не 1 End 1 End с данными. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] бережете! вторую неделюvikttur весь текст который ##0_ «) & (МАКС (ОСТАТ (ПРАВСИМВ Я прикрутил к на 0; на 0;текст1/текст23/текст34/текст34/текст555/ символа cell.Value = пробела в строке. ViterAlex пробовать! 24-04-1965 —–Казанский
Как убрать переносы строк в ячейке Excel — ЭКСЕЛЬ ХАК
Откроется диалог с двумя полями. В строке под заголовком «Найти» необходимо ввести неправильно набранный символ, в данном случае апостроф. Пишем новый символ в строке «Заменить на». Если вам просто нужно удалить апостроф, оставьте вторую строку пустой. Например, заменим запятую в столбце «Заменить на» и нажмите кнопку «Заменить все».
Как убрать переносы строк в ячейке Excel
А вы знаете как убрать переносы строк внутри ячейки Excel?
Если ячеек с переносами строк мало, то просто удалите символы или в конце, или в начале строки внутри ячейки с помощью клавиш Backspace или Delete.
Если ячеек с переносами много, то вам подойдут способы №2 и №3.
Для начала определите: есть ли в конце каждой строки ячейки пробел?
Для этого щелкните дважды левой клавишей мыши по ячейке и выделите крайний символ в строке.
▪️ В поле Найти нажмите сочетание клавиш CTRL+J для вставки символа переноса
▪️ Щелкните Заменить все и Закрыть
▪️ В поле Найти нажмите сочетание клавиш CTRL+J для вставки символа переноса
▪️ В поле Заменить на поставьте пробел
▪️ Щелкните Заменить все и Закрыть
В соседней ячейке примените функцию ПЕЧСИМВ (англ. CLEAN) для удаления непечатаемых символов.
Поделитесь, пожалуйста, в комментариях, какой способ вам понравился больше?
[expert_bq id=»1570″]Зная длину лишнего текста 6 знаков в индексе, вычитаем их из общего числа символов посчитанных функцией ДЛСТР и получаем то количество символов, которое должно остаться в тексте, когда удалим индекс. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] 643543). И так все равно ошибка (ОСТАТ (ПСТР (ТЕКСТ (ТЕКСТ (A1;n0);12;1)+1));»z»;» «)&ЕСЛИ (ТЕКСТ (A1;n0);8;1)-1);тыс; 2);»»)&ИНДЕКСконкретно в вашем справа запишем формулу слева запишем формулуduttyology значение, но без значение, но без символ.
Как в Ворде убрать непечатаемые знаки
Примечание: В версиях Ворд младше 2012 года группа “Абзац”, а вместе с ней и кнопка включения режима отображения непечатаемых знаков, находятся во вкладке “Разметка страницы” (2007 и выше) или “Формат” (2003).