Вопрос по whitespace, php, string – Как можно удалить пробелы в переменной PHP?

72

я знаю этокомментарий PHP.net. Я хотел бы иметь подобный инструмент, какtr для PHP такой, что я могу просто запустить

tr -d " " ""

Я неудачно запускаю функциюphp_strip_whitespace от

$tags_trimmed = php_strip_whitespace($tags);

Я также запускаю функцию регулярного выражения

$tags_trimmed = preg_replace(" ", "", $tags);
@taztodgmail Посмотрите на даты. Это 2009 год, а другой - 2013 год. Это дубликат 2013 года. Léo Léopold Hertz 준영
К вашему сведению: флаг \ s не включает символы utf-8, такие как nbsp ;, ps, quads и fs в кодировке utf-8;stackoverflow.com/questions/2227921/... ppostma1
конечно! У меня есть набор кода, который обращается к нему ppostma1

Ваш Ответ

11   ответов
12
$string = str_replace(" ", "", $string);

Я считаю, что preg_replace будет искать что-то вроде[:space:]

26

Иногда вам нужно будет удалить последовательные пробелы. Вы можете сделать это так:

$str = "My   name    is";
$str = preg_replace('/\s\s+/', ' ', $str);

Выход:

My name is
да ... его работа отлично .. :) The developer
Благодарю. Именно то, что я искал lomse
7

Вы можете использовать функцию обрезки из php, чтобы обрезать обе стороны (левую и правую)

 trim($yourinputdata," ");

Или же

trim($yourinputdata);

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

ltrim() - Removes whitespace or other predefined characters from the left side of a string
rtrim() - Removes whitespace or other predefined characters from the right side of a string

Система: PHP 4,5,7

Docs:http://php.net/manual/en/function.trim.php

Это должен быть правильный ответ, как и изначально, именно то, что спрашивает ОП. Это маленький, чистый ирасширяемой» добавив дополнительный символ для обрезки. Louis Loudog Trottier
Трим не делаетудалить пробелы внутри строки, только слева и справа. Кстати, пространство по умолчанию в отделке, вы недолжен дать второй аргумент RedClover
5

Если вы хотите удалить все пробелы везде из тегов $, почему бы просто:

str_replace(' ', '', $tags);

Если вы хотите удалить новые строки и тому подобное, потребуется немного больше ...

если ты неt присваивать результат переменной, это на самом деле ничего полезного не сделает. Paul Dixon
Пол Диксон, что?переменная? Я'Я программирую, но я нене знаю, что такое переменная ... для чего она нужна? Могу ли я найти это в Интернете? Важно знать, что это значит? Почему они ставят $ перед именем? I Wanna Know
1

Вы можете сделать это с помощьюereg_replace

 $str = 'This Is New Method Ever';
 $newstr = ereg_replace([[:space:]])+', '',  trim($str)):
 echo $newstr
 // Result - ThisIsNewMethodEver
Ereg устарел с PHP 5.3 RedClover
2

Любой возможный вариант заключается в использовании пользовательской оболочки файлов для имитации переменных в виде файлов. Вы можете достичь этого с помощью этого:

1) Прежде всего, зарегистрируйте свою обертку (только один раз в файле, используйте ее как session_start ()):

stream_wrapper_register('var', VarWrapper);

2) Затем определите свой класс-обертку (он написан очень быстро, не совсем правильно, но работает):

class VarWrapper {
  protected $pos = 0;
  protected $content;
  public function stream_open($path, $mode, $options, &$opened_path) {
    $varname = substr($path, 6);
    global $varname;
    $this->content = $varname;
    return true;
  }
  public function stream_read($count) {
    $s = substr($this->content, $this->pos, $count);
    $this->pos += $count;
    return $s;
  }
  public function stream_stat() {
    $f = fopen(__file__, 'rb');
    $a = fstat($f);
    fclose($f);
    if (isset($a[7])) $a[7] = strlen($this->content);
    return $a;
  }
}

3) Затем используйте любую файловую функцию с вашей оберткой по протоколу var: // (вы также можете использовать ее для include, require и т. Д.):

global $__myVar;
$__myVar = 'Enter tags here';
$data = php_strip_whitespace('var://__myVar');

Примечание: нене забудьте иметь вашу переменную в глобальной области видимости (например, глобальная $ __ myVar)

Это сложно, новички могут не захотеть взглянуть на это. Но для того, чтобы проявить усилия, яЯ буду голосовать так, что -1 в этом посте будет удален Ironwind
Да, я знаю, что это очень сложно, но это работает, а в некоторых случаях это действительно мощно. И, к сожалению, это единственный способ (вместо создания временных файлов, что некрасиво), как отправлять переменную в функции, которые работают только с файлами (и php_strip_whitespace не единственный). Например, вы можете заменить код, прежде чем требовать - вы можете создать свой собственный "предварительно компилятор» для PHP, где вы можете делать все, что вы хотите. Я использую его, и он становится очень мощным и полезным за годы программирования. micropro.cz
133

Раздетьлюбой пробел, вы можете использовать регулярное выражение

$str=preg_replace('/\s+/', '', $str);

Смотрите такжеэтот ответ для чего-то, что может обрабатывать пробелы в строках UTF-8.

Катир, с каким входом он терпит неудачу? Alex
Любые другие решения. Это (preg_replace) не для меня. Kathir
Это'на порядок быстрее, чем заменять их один за другим, этос почему :) Paul Dixon
Почему люди продолжают ставить+ послеs? Ты неэто не нужно для этого. Buttle Butkus
0

Это старый пост, но это можно сделать так:

if(!function_exists('strim')) :
function strim($str,$charlist=" ",$option=0){
    $return='';
    if(is_string($str))
    {
        // Translate HTML entities
        $return = str_replace(" "," ",$str);
        $return = strtr($return, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
        // Choose trim option
        switch($option)
        {
            // Strip whitespace (and other characters) from the begin and end of string
            default:
            case 0:
                $return = trim($return,$charlist);
            break;
            // Strip whitespace (and other characters) from the begin of string 
            case 1:
                $return = ltrim($return,$charlist);
            break;
            // Strip whitespace (and other characters) from the end of string 
            case 2:
                $return = rtrim($return,$charlist);
            break;

        }
    }
    return $return;
}
endif;

Стандартные функции trim () могут быть проблематичными, когда приходят объекты HTML. Тот'почему я написалСупер Трим " Функция, которая используется для решения этой проблемы, а также вы можете выбрать обрезку со стороны начала, конца или стенда строки.

1

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

$str = "this is a   string";

echo preg_replace_callback(
        '/\s+/',
        function ($matches) {
            return "";
        },
        $str
      );
Это'Хорошая практика по переполнению стека - добавить объяснение того, почему ваше решение должно работать. Для получения дополнительной информации читайтеКак ответить. Samuel Liew
Можете ли вы добавить примеры, в каких случаях обратный вызов полезен?preg_replace Léo Léopold Hertz 준영
0

Простой способ удалить пробелы из всей строки - использовать функцию разнесения и распечатать всю строку, используя цикл for.

 $text = $_POST['string'];
            $a=explode(" ", $text);
            $count=count($a);
            for($i=0;$i
36

Регулярное выражение не учитывает символы UTF-8 по умолчанию.\s метасимвол учитывает только исходный латинский набор. Поэтому следующая команда удаляет только символы табуляции, пробелы, возврат каретки и новые строки.

// http://stackoverflow.com/a/1279798/54964
$str=preg_replace('/\s+/', '', $str);

Когда UTF-8 становится мейнстримом, это выражение будет чаще терпеть неудачу / останавливаться, когда достигнет новых символов utf-8, оставляя пробелы после этого\s не может объяснить.

Чтобы справиться с новыми типами пробелов, введенных в Unicode / UTF-8, требуется более обширная строка для соответствия и удаления современных пробелов.

Поскольку регулярные выражения по умолчанию не распознают многобайтовые символы, для их идентификации можно использовать только разделенную мета-строку, чтобы предотвратить изменение сегментов байтов в других символах utf-8 (\x80 в наборе квадро может заменить все\x80 суббайты в умных кавычках)

$cleanedstr = preg_replace(
    "/(\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf)+/",
    "_",
    $str
);

Это учитывает и удаляет вкладки, переводы строк, вертикальные вкладки, форм-фиды, возврат каретки, пробелы и, кроме того, изВот:

следующая строка, неразрывные пробелы, монгольский разделитель гласных, [en quad, em quad, en пробел, пробел em, пробел «три за em», пробел четыре за em, пробел шесть по em, пробел, пунктуация , тонкое пространство, пространство волос, пространство нулевой ширины, без объединения нулевой ширины, объединитель нулевой ширины], разделитель строк, разделитель абзацев, узкое пространство без разрывов, среднее математическое пространство, объединитель слов, идеографическое пространство и разрывное пространство.

Многие из них приводят к хаосу в XML-файлах при экспорте из автоматических инструментов или сайтов, которые мешают текстовому поиску, распознаванию и могут незаметно вставляться в исходный код PHP, что заставляет анализаторперейти к следующей команде (абзацы и разделители строк), что приводит к пропуску строк кода, что приводит к периодическим, необъяснимым ошибкам, которые мы начали называть "заболевания, передающиеся половым путем »

[Это больше не безопасно копировать и вставлять из Интернета. Используйте сканер символов для защиты вашего кода. лол]

Как это? Я пытался объяснить староебольше не работает ppostma1
не должен»т там будетu флаг в регулярном выражении? RedClover
Спасибо за помощь @Masi! ppostma1
Отлично! Можете ли вы включить количество символов в вашем наборе? - - Это поможет нам определить, что у вас действительно есть полный набор этих персонажей. - Я принял ваш ответ, потому что теперь он более полный, чем старый принятый ответ. Léo Léopold Hertz 준영

Похожие вопросы