Php удалить символ nbsp

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

Мне кажется, мне нужно удалить символы 0-31 и 127, Есть ли функция или кусок кода, чтобы сделать это эффективно.

14 ответов

7 бит ASCII?

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

$string = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $string); 

8 бит расширенного ASCII?

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

$string = preg_replace('/[\x00-\x1F\x7F]/', '', $string); 

UTF-8?

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

$string = preg_replace('/[\x00-\x1F\x7F]/u', '', $string); 

Это просто удаляет 0-31 и 127. Это работает в ASCII и UTF-8, потому что оба разделяют тот же диапазон набора настроек (как отмечено по мгутт ниже). Строго говоря, это будет работать без модификатора /u . Но это облегчает жизнь, если вы хотите удалить другие символы. Если вы имеете дело с Unicode, есть потенциально много непечатаемых элементов, но рассмотрим простой: NO-BREAK SPACE (U + 00A0) В строке UTF-8 это будет закодировано как 0xC2A0 . Вы можете искать и удалять эту определенную последовательность, но с модификатором /u на месте вы можете просто добавить \xA0 в класс символов:

$string = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $string); 

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

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

//build an array we can re-use across several operations $badchar=array( // control characters chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10), chr(11), chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20), chr(21), chr(22), chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30), chr(31), // non-printing characters chr(127) ); //replace the unwanted chars $str2 = str_replace($badchar, '', $str); 

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

 2 chars str_replace 5.3439ms preg_replace 2.9919ms preg_replace is 44.01% faster 4 chars str_replace 6.0701ms preg_replace 1.4119ms preg_replace is 76.74% faster 8 chars str_replace 5.8119ms preg_replace 2.0721ms preg_replace is 64.35% faster 16 chars str_replace 6.0401ms preg_replace 2.1980ms preg_replace is 63.61% faster 32 chars str_replace 6.0320ms preg_replace 2.6770ms preg_replace is 55.62% faster 64 chars str_replace 7.4198ms preg_replace 4.4160ms preg_replace is 40.48% faster 128 chars str_replace 12.7239ms preg_replace 7.5412ms preg_replace is 40.73% faster 256 chars str_replace 19.8820ms preg_replace 17.1330ms preg_replace is 13.83% faster 512 chars str_replace 34.3399ms preg_replace 34.0221ms preg_replace is 0.93% faster 1024 chars str_replace 57.1141ms preg_replace 67.0300ms str_replace is 14.79% faster 2048 chars str_replace 94.7111ms preg_replace 123.3189ms str_replace is 23.20% faster 4096 chars str_replace 227.7029ms preg_replace 258.3771ms str_replace is 11.87% faster 8192 chars str_replace 506.3410ms preg_replace 555.6269ms str_replace is 8.87% faster 16384 chars str_replace 1116.8811ms preg_replace 1098.0589ms preg_replace is 1.69% faster 32768 chars str_replace 2299.3128ms preg_replace 2222.8632ms preg_replace is 3.32% faster 

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

Читайте также:  Размеры текстового поля

Источник

Как убрать &nbsp (неразрывный пробел) с помощью php

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

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

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

Зачем убирать закодированный неразрывный пробел

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

Ну например, если мы захотим для какой-то строки использовать css свойство word-break, чтобы задать определенные правила переноса, то для строки с неразрывными пробелами это свойство сработает некорректно.

Убираем неразрывные пробелы из строки

Если информация приходит из базы данных, то на ум приходят 2 варианта: либо прошерстить базу и заменить неразрывные пробелы, либо исправить уже пришедшую строку.

Мы воспользуемся вторым вариантом. Сразу хочу сказать, что просто str_replace здесь не сработает. Нужно будет добавить в нашу формулу еще и htmlentities – которая преобразует все возможные символы в соответствующие html сущности.

Допустим, что мы получили из базы данных строку с неразрывными пробелами и сохранили ее в переменной my_text.

Тогда код для замены неразрывных пробелов на обычные будет выглядеть так:

Теперь в переменной $new_text у нас хранится обработанный текст.

Читайте также:  Javascript get elements by index

Вот и всё. Надеюсь эта статья вам поможет. Делитесь в социальных сетях, оставляйте комментарии. Приятной работы 😉

Источник

trim

Можно также задать список символов для удаления с помощью необязательного аргумента characters . Просто перечислите все символы, которые вы хотите удалить. Можно указать конструкцию .. для обозначения диапазона символов.

Возвращаемые значения

Примеры

Пример #1 Пример использования trim()

$text = «\t\tThese are a few words 🙂 . » ;
$binary = «\x09Example string\x0A» ;
$hello = «Hello World» ;
var_dump ( $text , $binary , $hello );

$trimmed = trim ( $text );
var_dump ( $trimmed );

$trimmed = trim ( $text , » \t.» );
var_dump ( $trimmed );

$trimmed = trim ( $hello , «Hdle» );
var_dump ( $trimmed );

$trimmed = trim ( $hello , ‘HdWr’ );
var_dump ( $trimmed );

// удаляем управляющие ASCII-символы с начала и конца $binary
// (от 0 до 31 включительно)
$clean = trim ( $binary , «\x00..\x1F» );
var_dump ( $clean );

Результат выполнения данного примера:

string(32) " These are a few words :) . " string(16) " Example string " string(11) "Hello World" string(28) "These are a few words :) . " string(24) "These are a few words :)" string(5) "o Wor" string(9) "ello Worl" string(14) "Example string"

Пример #2 Обрезание значений массива с помощью trim()

$fruit = array( ‘apple’ , ‘banana ‘ , ‘ cranberry ‘ );
var_dump ( $fruit );

array_walk ( $fruit , ‘trim_value’ );
var_dump ( $fruit );

Результат выполнения данного примера:

array(3) < [0]=>string(5) "apple" [1]=> string(7) "banana " [2]=> string(11) " cranberry " > array(3) < [0]=>string(5) "apple" [1]=> string(6) "banana" [2]=> string(9) "cranberry" >

Примечания

Замечание: Возможные трюки: удаление символов из середины строки

Так как trim() удаляет символы с начала и конца строки string , то удаление (или не удаление) символов из середины строки может ввести в недоумение. trim(‘abc’, ‘bad’) удалит как ‘a’, так и ‘b’, потому что удаление ‘a’ сдвинет ‘b’ к началу строки, что также позволит её удалить. Вот почему это «работает», тогда как trim(‘abc’, ‘b’) очевидно нет.

Смотрите также

  • ltrim() — Удаляет пробелы (или другие символы) из начала строки
  • rtrim() — Удаляет пробелы (или другие символы) из конца строки
  • str_replace() — Заменяет все вхождения строки поиска на строку замены
Читайте также:  Найти произведение трех чисел питон

User Contributed Notes 2 notes

note there is a behaviour change in php 8

You used to be able to say:
$p1 = trim($_POST[‘p1’]);
This will now throw deprecated warnings if parameter p1 is not set. It is better to say:
$p1 = trim($_POST[‘p1’]??»);
or
$p1 = isset($_POST[‘p1’]) ? trim($_POST[‘p1’]) : null;
or
$p1 = isset($_POST[‘p1’]) ? trim($_POST[‘p1’]) : »;

Note that trim() is not aware of Unicode points that represent whitespace (e.g., in the General Punctuation block), except, of course, for the ones mentioned in this page.

There is no Unicode-specific trim function in PHP at the time of writing (July 2023), but you can try some examples of trims using multibyte strings posted on the comments for the mbstring extension: https://www.php.net/manual/en/ref.mbstring.php

Источник

php Удалить неразрывный пробел — non breaking space

vedro-compota's picture

Предположим что в некоторой html форме возникают т.н. «неразрывные» пробелы (ну и вообще пусты символы которые вроде и не табы, но обычном trim-ом их не уберёшь) —
пусть мы получили содержимое формы с строку $phrase, тогда удалить эти пробелы можно таким способом:

Решение

$phrase = strtr($phrase, array_flip( get_html_translation_table(HTML_ENTITIES, ENT_QUOTES, "UTF-8") ) ); $phrase = trim($phrase,chr(0xC2).chr(0xA0)); // удаляем "неразрывные пробелы"

вообще это мутная тема (особенно если вы не разбираетесь с кодировании символов ) — всё зависит от кодировки. надо разбираться. просто так использовать chr(160) — иначе в UTF-8 можно поудалять то, что не собирались) —
но можете изучить вот этот пример с сайта php.net:

// turn some HTML with non-breaking spaces into a "normal" string $myHTML = " abc"; $converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); // this WILL NOT work as expected // $converted will still appear as " abc" in view source // (but not in od -x) $converted = trim($converted); // are translated to 0xA0, so use: $converted = trim($converted, "\xA0"); // > // UTF encodes it as chr(0xC2).chr(0xA0) $converted = trim($converted,chr(0xC2).chr(0xA0)); // should work // PS: Thanks to John for saving my sanity!

Key Words for FKN + antitotal forum (CS VSU):

Источник

Оцените статью