Чтобы удалить пробелы внутри переменной в PHP

как вы можете удалять пробелы в переменной PHP?

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

tr -d " " ""

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

$tags_trimmed = php_strip_whitespace($tags);

я запускаю функцию regex также безуспешно

$tags_trimmed = preg_replace(" ", "", $tags);

10 ответов


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

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

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

для того чтобы общаться с новыми типами из пробелов, введенных в unicode / utf-8, требуется более обширная строка для соответствия и удаления современного пробела.

поскольку регулярные выражения по умолчанию не распознают многобайтовые символы, для их идентификации можно использовать только разделенную мета-строку, чтобы предотвратить изменение байтовых сегментов в других символах utf-8 (\x80 в quad set можно заменить все \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
);

это учитывает и удаляет вкладки, новые строки, вертикальные вкладки, formfeeds, возврат каретки, пробелы и дополнительно от здесь:

строки, неразрывный пробел, монгольский гласные сепаратора, [Ан квад, квад ЭМ, ванной пространства, их место, три-за-ет место, четыре-за их места, шесть-на их пространство, рисунок космос, знаки препинания пространства, тонкие места, волосы пространство нулевой ширины пространства, нулевой ширины не столяр, нулевой ширины столяр], разделительную линию, пункт разделитель, узкий неразрывный пробел, среднего математического пространства, слово столяр, ideographical пространство, и нулевой ширины неразрывный пробел.

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

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


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

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

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


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

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

выход:

My name is

$string = str_replace(" ", "", $string);

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


вы можете использовать функцию обрезки с 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


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

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

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


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

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:// (вы можете использовать его для включения, требовать и т. д. тоже):

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

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


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

 $str = 'This Is New Method Ever';
 $newstr = ereg_replace([[:space:]])+', '',  trim($str)):
 echo $newstr
 // Result - ThisIsNewMethodEver

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


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

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. Вот почему я написал функцию "Super Trim", которая используется для решения этой проблемы, а также вы можете выбрать обрезку с начала, конца или стороны стенда строки.