- замена пробелов
- Удаление лишних пробелов в PHP.
- Удаление пробелов в начале или конце строки.
- Удаление лишних пробелов в самом тексте.
- Удаление «не удаляемых» пробелов.
- Как правильно заменить несколько пробелов на один пробел в PHP?
- 3 ответа
- Ещё вопросы
- Заменить несколько пробелов в строке одним пробелом
- 4 ответа
замена пробелов
Замена пробелов на «_» при загрузке файла на сервер
Не подскажите, почему файловые хостинги проделывают данную операцию? Думал, что php выбивает.
Замена пробелов(%20) на _
скрипт загрузки файла <?php $error = ""; $msg = ""; $fileElementName = ‘fileToUpload’; $i =.
Замена пробелов в строке
На вход поступает строка. В случае, если строка имеет пробел, то заменяем его на символ %. В.
Замена пробелов на звёздочки
Подскажите пожалуйста, как сделать чтоб все пробелы в тексте заменились на звёздочки? Задача звучит.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
function replace ($string) { $string = ereg_replace(","<",$string); $string = ereg_replace('\\\"',""",$string); $string = ereg_replace('\\"',""",$string); $string = ereg_replace("!","!",$string); $string = ereg_replace("\r\n","
",$string); $string = ereg_replace("\n","
",$string); $string = ereg_replace("%","%",$string); $string = ereg_replace("^ +","",$string); $string = ereg_replace(" +$","",$string); $string = ereg_replace(" +"," ",$string); return $string; }
$string = str_replace(' ', ' ', $string);
$string = preg_replace("~(\r\n|\n|\r)~", '
', $string);
Сообщение от Wbgury
Замена пробелов на подчеркивание _
есть исходный текст: APPLE IPHONE 5 WHITE Надо получить: APPLE__IPHONE_5_WHITE
Замена пробелов в подстроке
Мне нужно написать функцию которая будет находить и заменять обычный пробел на нижний, не совсем.
Скрипт: Замена пробелов
Пишу простенький скрипт. Замена пробелов в именах файлов на символ подчёркивания.Вот сам скрипт.
Замена пробелов на знак ;
Задача такая, есть текстовый файл в котором инфа хранится в след. формате: 45024015 Юсупов.
Удаление лишних пробелов в PHP.
Обрабатывая информацию, собирая ее из разных источников, например с сайта поставщика, мы часто сталкиваемся с тем, что нам надо ее привести в достойный вид, удалив лишние пробелы.
Удаление пробелов в начале или конце строки.
Стандартные функция trim( string $str [, string $character_mask = » \t\n\r\0\x0B» ]) удаляет все возможные пробелы в начале или в конце строки, так же эта функция может удалять те символы, которые вам не нужны, например точку или запятую:
Так же есть 2 функции, ltrim и rtrim, которые работают так же как и trim, за исключением того , что ltrim удаляет символы в начале строки, а rtrim в конце.
Удаление лишних пробелов в самом тексте.
Иногда нужно удалить лишние пробелы, а иногда и табы, в самом тексте, например: «Купив телефон сегодня вы получите самый лучший подарок». В этом тексте после каждого слова стоит более 1 пробела, Попробуем заменить лишние через регулярное выражение:
В данном случае \s говорит что надо заменить все пробелы, а + включая табы на 1 пробел. Если вы считаете, что регулярные выражения зло, то можно использовать:
$str = str_replace(» «, » «, $str); while( strpos($str,» «)!==false)
Удаление «не удаляемых» пробелов.
Возможно вы столкнулись с такой проблемой, что ни одно из средств перечисленных выше не удаляет пробелы. Для начала рассмотрите внимательно текст, желательно в исходном коде, потому что текст « Купив телефон сегодня вы получите самый лучший подарок» может оказаться таким: « Купив телефон сегодня вы получите самый лучший подарок». Для начала надо заменить и просто на пробелы:
$str = str_replace('&', '&', $str); $str = str_replace(' ', ' ', $str);
А потом, применить один из способов, о котором я писал выше.
Хорошо, это мы сделали, но у нас остались лишние пробелы, которые не удаляются стандартными методами. Вероятнее всего это NO-BREAK SPACE, в таблице utf-8 символов он идет как c2 a0.
Для начала попробуйте перевести ваш текст в HEX:
echo bin2hex($str); echo substr_count($str, "\xc2\xa0");
и поищите там: c2a0, как видно на скриншоте, у меня аж 2 таких пробела
Удаление через регулярное выражение:
echo preg_replace('!\s++!u', ' ', $str);
Удаление без регулярного выражения:
$text = hex2bin(str_replace('c2a0', '20', bin2hex($str))); while( strpos($text,' ')!==false) < $text = str_replace(" ", " ", $text); >$text = trim($text);
переводим наш текс в HEX, заменяем NO-BREAK SPACE на обычный пробел, переводим обратно в обычный текст, после этого можно сделать замену пробелов и чистку.
Возможно у вас есть свой способ, может более практичный, как исправлять «не удаляемые» пробелы, то поделитесь в комментариях.
Как правильно заменить несколько пробелов на один пробел в PHP?
Я просматривал ответы SO и обнаружил, что решение, которое большинство дало для замены нескольких пробелов, следующее:
$new_str = preg_replace("/\s+/", " ", $str);
Но во многих случаях символы пробела включают символы UTF, которые включают в себя фид строки, фид формы, возврат каретки, неразрывное пространство и т.д. Эта вики описывает, что UTF определяет двадцать пять символов, определенных как пробельные символы. Итак, как мы можем заменить все эти символы, используя регулярные выражения?
3 ответа
При передаче модификатора u \s становится доступным для Unicode. Итак, простым решением является использование
$new_str = preg_replace("/\s+/u", " ", $str); ^^
Да, это становится известно, но это не заменяет пробелы как неразрывные пробелы. Нам нужно указать эти символы конкретно. Например, попробуйте свое решение с помощью этой строки: $str = «Hello there».str_repeat(json_decode(‘»\u00A0″‘),10).»Bob!»; Строка имеет 10 пробелов, которые являются неразрывными и представлены utf-кодом 00A0 . Вы можете попробовать повторить эту строку, чтобы увидеть, что она делает.
Неразрывный пробел в моем образце текста. Она заменяется. А вот демонстрация с примером строки выше. Также оставляя только 1 место внутри.
Я пробовал этот код на основе вашего, но я не получаю результат. Я что-то пропустил? $utf = «Hello there».str_repeat(json_decode(‘»\u00A0″‘),10).»Bob!»; $new_str = preg_replace(«/\s+/u», » «, $utf); echo $new_str;
Снова, посмотрите ideone.com/I8qnpV . Вы должны проверить, правильно ли настроена ваша среда для работы с UTF.
Хорошо, это странно. Знаете ли вы, что может быть не так с моей средой? Решение, которое я опубликовал, работает в моей нынешней среде. Он обнаруживает символы UTF. Но ваше решение не дает того же результата. Любая идея, где я мог бы прочитать больше об этом?
Образец, который соответствует все пробелы Unicode, [\pZ\pC] . Ниже приведена unit test, чтобы доказать это.
Если вы анализируете ввод пользователя в UTF-8 и должны его нормализовать, важно, чтобы ваш список соответствовал этому списку. Поэтому, чтобы ответить на ваш вопрос:
$new_str = preg_replace(«/[\pZ\pC]+/u», » «, $str);
Первое, что нужно сделать, это прочитать this объяснение того, как unicode можно обрабатывать в regex. Приступая конкретно к PHP, нам нужно прежде всего включить модификатор PCRE ‘u’, чтобы движок распознавал символы UTF. Таким образом, это будет:
Следующее, что нужно отметить, что в символах юникода PHP есть шаблон \x , где 00A0 — шестнадцатеричное представление для non-breaking space . Поэтому, если мы хотим заменить последовательные неразрывные пробелы одним пространством, мы имели бы:
$pattern = "/\x+/u"; $new_str = preg_replace($pattern," ",$str);
И если бы мы включили другие типы пространств, упомянутые в wiki, например:
Наш шаблон выглядит следующим образом:
Но это действительно не очень хорошо, так как механизм регулярных выражений будет навсегда найти все комбинации этих символов. Это связано с тем, что символы включены в квадратные скобки [], и у нас есть + для одного или нескольких вхождений.
Лучшим способом получить более быстрые результаты является замена всех вхождений каждого из этих символов на нормальное пространство в первую очередь. А затем заменив несколько пробелов на одно нормальное пространство. Мы удаляем [] + и вместо этого разделяем символы с помощью оператора или | :
$pattern = "/\x|\x|\x|\x/u"; $new_str = preg_replace($pattern," ",$str); // we have one-to-one replacement of character by a normal space, so 5 unicode chars give 5 normal spaces $final_str = preg_replace("/\s+/", " ", $new_str); // multiple normal spaces now become single normal space
Ещё вопросы
- 1 VideoView воспроизводится нормально, но не отображается при переключении полноэкранных представлений
- 0 Переход через неограниченные вложенные массивы
- 1 Код Python 3.5 / 3.6 в зависимости от порядка вставки dict
- 1 JavaScript Судоку решатель. Откуда взялся предыдущий номер?
- 1 Как объединить 2 блока кода JavaScript
- 0 ASN1C компиляция
- 1 Создать один CSV из двух файлов CSV со значениями X и Y в Python
- 0 Как использовать дополнительные значения в маршрутах Laravel?
- 0 Программа C ++ не будет собираться. Получение неопределенных символов для ошибки архитектуры
- 1 Скрепка с ActionCable
- 1 установка общего стиля кнопок для старых версий ОС
- 0 Как добавить нового пользователя в Kamailio, используя PHP shell_exec?
- 0 сообщение об успехе или неудаче при отправке формы
- 1 Утечка памяти при попытке сохранить ссылку на фрагментное представление за пределы onDestoryView ()
- 0 Apache скинул 404 для файла в папке var / www
- 0 кодирование значения объекта в функции ng-click
- 1 Почему хорошо очищать SecurityContextHolder после завершения веб-запроса?
- 1 RxJava doOnError против onError
- 1 Цикл массива очередей
- 0 центрированный, но также фиксированный
- 1 Сопоставить элементы в ListView от одного адаптера со значениями из другого ListView и адаптера
- 1 Событие щелчка LinkButton не срабатывает, если какое-либо действие, выполненное с клавишей ENTER, вместо нажатия кнопки
- 1 Попробуйте и поймать блоки: будь то в самом классе или когда я вызываю метод вне класса
- 0 HTML таблицы и столбца
- 1 Обращение к члену в качестве переменной в Discord.py
- 0 Как создать макет сайта с полным окном просмотра
- 0 Как добавить текст и CSS с помощью jquery
- 1 Используйте разные поля для проверки в ASP.NET Identity
- 0 У меня есть ошибка с использованием этого-> в C ++
- 1 Java помощь относительно циклов
- 0 JQuery флажок проблемы
- 0 Как привязать сгенерированные d3 HTML-элементы к области видимости?
- 0 Как потушить изображения и текст (здесь текст связан с конкретным изображением) за один раз, используя плагин цикла jQuery?
- 1 Есть ли у RESTEasy какой-нибудь помощник для создания конфигурации приложения?
- 1 Установка яркости фильтра родителя без влияния на дочерний элемент
- 0 Данные таблицы HTML смещаются в другие столбцы
- 0 PHP массив считывает последовательность
- 1 Отрегулируйте элемент в панели навигации слева, если нет значка
- 1 как подстроку строки при поиске определенного имени?
- 1 Модульная экспонента в Java (алгоритм дает неправильный ответ)
- 1 Как преобразовать список из списка слов в виде строк?
- 0 Angular — функция в зависимости или зависимость в параметрах функции?
- 0 MySQL Connection в веб-сервере Amazon
- 1 Правильное отображение тенденций в matplotlib python, таких как электронные таблицы
- 1 Восстанавливаемое веб-задание Azure (не удалять из очереди)
- 0 Кнопка для удаления записи в таблице
- 1 Python конвертирование из c # Расчет CRC8 из кадра 4/5 байт
- 0 Почему MySQL выполняет сортировку файлов по этому запросу?
- 0 Как настроить позиции с использованием HTML в DW?
- 1 Руководство по GStreamer для Android не удалось построить
Заменить несколько пробелов в строке одним пробелом
У меня есть файл с несколькими пробелами среди слов в какой-то момент. Мне нужно очистить файл и заменить существующие многостраничные последовательности только одним пробелом. Я написал следующее утверждение, которое не работает вообще, и, похоже, я делаю большую ошибку.
Мой файл очень прост. Вот часть этого:
Hjhajhashsh dwddd dddd sss ddd wdd ddcdsefe xsddd scdc yyy5ty ewewdwdewde wwwe ddr3r dce eggrg vgrg fbjb nnn bh jfvddffv mnmb weer ffer3ef f4r4 34t4 rt4t4t 4t4t4t4t ffrr rrr ww w w ee3e iioi hj hmm mmmmm mmjm lk ;’’ kjmm . jjj hhh lmmmlm m mmmm lklmm jlmm m
4 ответа
Ваше регулярное выражение заменяет любое количество пробелов (включая ноль) пробелом. Вы должны заменить только два или более (в конце концов, замена одного пробела на себя не имеет смысла):
Что я обычно делаю, чтобы очистить несколько мест:
- строки с несколькими пробелами редки
- два пробела гораздо чаще, чем три или более
- preg_replace дорого с точки зрения процессора
- при возможности следует избегать копирования символов в новую строку
Конечно, если условие № 1 не выполняется, такой подход не имеет смысла, но обычно это так.
Если выполнено № 1, а другие нет (это может зависеть от данных, программного обеспечения (версия PHP) или даже оборудования), то следующее может быть быстрее:
В любом случае, если несколько пробелов появляются только, скажем, в 2% ваших строк, важна профилактическая проверка с помощью strpos и вы, вероятно, не очень заботитесь об оптимизации оставшихся 2% случаев.