Как можно удалить пробелы в переменной PHP?
Я знаю этот комментарий PHP.net.
Я хотел бы иметь такой инструмент, как tr
для PHP, чтобы я мог просто запустить
tr -d " " ""
Я неудачно запускаю функцию php_strip_whitespace
от
$tags_trimmed = php_strip_whitespace($tags);
Я также запускаю функцию регулярного выражения
$tags_trimmed = preg_replace(" ", "", $tags);
Ответы
Ответ 1
Регулярное выражение не учитывает символы 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
);
Здесь учитываются и удаляются вкладки, новые строки, вертикальные вкладки, формы, возврат каретки, пробелы и, кроме того, из здесь:
nextline, неразрывные пробелы, разделитель гласных монголов, [en quad, em quad, en space, em space, пространство три на em, пространство с четырьмя-em-em, пространство с шестью-на-em, пространство с рисунком, пространство препинания, тонкое пространство, пространство для волос, пространство с нулевой шириной, нулевой ширины, стопор для нулевой ширины, стопор для нулевой ширины], разделитель строк, разделитель абзацев, узкое пространство без разрыва, среднее математическое пространство, столярный столик, идеографическое пространство и нуль ширина неразрывное пространство.
Многие из них вредят в xml файлах при экспорте из автоматизированных инструментов или сайтов, которые вытесняют текстовый поиск, распознавание и могут быть незаметно вставлены в исходный код PHP, что заставляет парсер перейти к следующей команде (разделители абзацев и строк) что приводит к пропуску строк кода, что приводит к прерывистым необъяснимым ошибкам, которые мы начали называть "передаваемыми по тексту заболеваниями"
[Невозможно скопировать и вставить его из Интернета. Используйте защитный код для защиты вашего кода. лол]
Ответ 2
Чтобы разбить любые пробелы, вы можете использовать регулярное выражение
$str=preg_replace('/\s+/', '', $str);
См. также этот ответ для чего-то, что может обрабатывать пробелы в строках UTF-8.
Ответ 3
Иногда вам нужно будет удалить последовательные пробелы. Вы можете сделать это следующим образом:
$str = "My name is";
$str = preg_replace('/\s\s+/', ' ', $str);
Вывод:
My name is
Ответ 4
$string = str_replace(" ", "", $string);
Я считаю, что preg_replace будет искать что-то вроде [:space:]
Ответ 5
Вы можете использовать функцию trim из 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
Документы: http://php.net/manual/en/function.trim.php
Ответ 6
Если вы хотите удалить все пробелы везде из $tags, почему бы не просто:
str_replace(' ', '', $tags);
Если вы хотите удалить новые строки и такие, которые потребуют немного больше...
Ответ 7
Любая возможная опция заключается в использовании специальной оболочки файлов для имитации переменных в виде файлов. Вы можете добиться этого, используя это:
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)
Ответ 8
Вы можете сделать это, используя ereg_replace
$str = 'This Is New Method Ever';
$newstr = ereg_replace([[:space:]])+', '', trim($str)):
echo $newstr
// Result - ThisIsNewMethodEver
Ответ 9
Иногда вам нужно будет удалить последовательные пробелы. Вы можете сделать это следующим образом:
$str = "My name is faisal";
$str = preg_replace('/\s\s+/', ' ', $str);
Вывод:
My name is faisal
NB: str_replace лучше, чем preg_replace, если вы действительно просто хотите удалить символ пробела. Причиной использования preg_replace было бы удаление всех пробелов (включая вкладки, новые строки и т.д.).
Ответ 10
вы также используете функцию preg_replace_callback
. и эта функция идентична своей сестре preg_replace
, за исключением того, что она может принимать функцию обратного вызова, которая дает вам больше контроля над тем, как вы управляете своим выходом.
$str = "this is a string";
echo preg_replace_callback(
'/\s+/',
function ($matches) {
return "";
},
$str
);
Ответ 11
Это старый пост, но его можно сделать так:
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", которая используется для решения этой проблемы, а также вы можете выбрать обрезку со стороны начала, конца или стенда строки.
Ответ 12
Простой способ удалить пробелы из всей строки - использовать функцию разнесения и распечатать всю строку, используя цикл for.
$text = $_POST['string'];
$a=explode(" ", $text);
$count=count($a);
for($i=0;$i<$count; $i++){
echo $a[$i];
}
Ответ 13
Аргумент\s regex не совместим с многобайтовыми строками UTF-8.
Этот PHP RegEx является тем, который я написал, чтобы решить эту проблему, используя аргументы на основе PCRE (совместимые с Perl) в качестве замены строк UTF-8:
function remove_utf8_whitespace($input) {
return preg_replace('/\h+/u','',preg_replace('/\R+/u','',$input));
}
- Пример использования -
Перед тем:
$string = " this is a test \n and another test\n\r\t ok! \n";
echo $string;
this is a test
and another test
ok!
echo strlen($string); // result: 43
После:
$string = remove_utf8_whitespace($string);
echo $string;
thisisatestandanothertestok!
echo strlen($string); // result: 28
Список аргументов PCRE
Источник: https://www.rexegg.com/regex-quickstart.html
Character Legend Example Sample Match
\t Tab T\t\w{2} T ab
\r Carriage return character see below
\n Line feed character see below
\r\n Line separator on Windows AB\r\nCD AB
CD
\N Perl, PCRE (C, PHP, R…): one character that is not a line break \N+ ABC
\h Perl, PCRE (C, PHP, R…), Java: one horizontal whitespace character: tab or Unicode space separator
\H One character that is not a horizontal whitespace
\v .NET, JavaScript, Python, Ruby: vertical tab
\v Perl, PCRE (C, PHP, R…), Java: one vertical whitespace character: line feed, carriage return, vertical tab, form feed, paragraph or line separator
\V Perl, PCRE (C, PHP, R…), Java: any character that is not a vertical whitespace
\R Perl, PCRE (C, PHP, R…), Java: one line break (carriage return + line feed pair, and all the characters matched by \v)
Ответ 14
Отделка должна делать правую и левую обивку пространств. Большую часть времени вы хотите удалить более одного места на входе. Поэтому всегда лучше использовать комбинацию триммеров и регулярных выражений.
$txt = ' Hello World! ';
$txt = trim(preg_replace('/\s{2}+/','',$txt));
echo '<br>'.$txt.'<br>';