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

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: Как удалить все непечатаемые символы в строке?

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

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

7 бит ASCII?

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

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

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

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

Приложение: А как насчет str_replace?

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

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

Сроки рассчитаны на 10000 итераций, но более интересны относительные различия. До 512 символов я всегда видел preg_replace win. В диапазоне 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, если не допустимо, а не выполняет автоматическое удаление).

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

Вы можете использовать классы персонажей

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

Чтобы еще больше усугубить проблему, это таблица «сервер против сервера», «соединение» и «рендеринг контента», о чем немного говорилось здесь.

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

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

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

Для удаления всех не-ASCII символов из входной строки

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

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

Источник

How to remove all non printable characters in a string?

I imagine I need to remove chars 0-31 and 127.

Is there a function or piece of code to do this efficiently?

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

17 Answers 17

7 bit ASCII?

If your Tardis just landed in 1963, and you just want the 7 bit printable ASCII chars, you can rip out everything from 0-31 and 127-255 with this:

It matches anything in range 0-31, 127-255 and removes it.

8 bit extended ASCII?

Ah, welcome back to the 21st century. If you have a UTF-8 encoded string, then the /u modifier can be used on the regex

This just removes 0-31 and 127. This works in ASCII and UTF-8 because both share the same control set range (as noted by mgutt below). Strictly speaking, this would work without the /u modifier. But it makes life easier if you want to remove other chars.

If you’re dealing with Unicode, there are potentially many non-printing elements, but let’s consider a simple one: NO-BREAK SPACE (U+00A0)

Addendum: What about str_replace?

preg_replace is pretty efficient, but if you’re doing this operation a lot, you could build an array of chars you want to remove, and use str_replace as noted by mgutt below, e.g.

Intuitively, this seems like it would be fast, but it’s not always the case, you should definitely benchmark to see if it saves you anything. I did some benchmarks across a variety string lengths with random data, and this pattern emerged using php 7.0.12

The timings themselves are for 10000 iterations, but what’s more interesting is the relative differences. Up to 512 chars, I was seeing preg_replace alway win. In the 1-8kb range, str_replace had a marginal edge.

I thought it was interesting result, so including it here. The important thing is not to take this result and use it to decide which method to use, but to benchmark against your own data and then decide.

Источник

Как с помощью PHP удалить символ – все способы реализации

Дата публикации: 2017-05-19

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

От автора: может, слов не выкинешь из песни. Но вот в PHP удалить символ проще простого. Сегодня этим и займемся.

Функциональный подход

Имеется в виду использование встроенных в ядро языка функций. Сначала используем str_replace(). Она принимает три аргумента: символ замены, заменяемый символ и исходную строку. Пример:

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

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

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Но это не единственная функция для изъятия «нежелательного» элемента из строки. Вот еще одна:

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

Здесь для удаления определенных частей текста применяем функцию substr(). В качестве параметров передаем ей первоначальную строку, положение, с которого нужно отсечь строку, и положение последнего знака возвращаемой подстроки.

Использование данной функции оправдано, если знаете очередность символа, который нужно изъять.

Вот еще одна функция, помогающая в решении проблемы. strstr() возвращает часть строки до или после переданного ей символа. Как от него избавиться:

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

Для этого в параметрах функции указываем true и получаем левую часть строки от символа, но уже без него.

Регулярки, потому что регулярно

Как всегда, господа, «на второе» у нас регулярные выражения. Их использование крайне удобно для решения некоторых «неудобных» ситуаций. К примеру, если нужно избавиться от повторяющихся знаков:

Здесь применяется функция для работы с регулярками preg_replace(). В переданной ей строке она ищет заданный символ и меняет его на другой. В приведенном выше примере таким образом мы избавились от нулей в тексте.

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

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

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

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Источник

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

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