如何去除 PHP 变量中的空白?

我知道这个 评论 PHP.net。 我希望有一个类似的工具,如 tr的 PHP,这样我可以简单地运行

tr -d " " ""

函数 php_strip_whitespace运行失败

$tags_trimmed = php_strip_whitespace($tags);

我运行 regex 函数也失败了

$tags_trimmed = preg_replace(" ", "", $tags);
131004 次浏览
$string = str_replace(" ", "", $string);

我相信 preg _ place 会寻找类似 [:space:]的东西

如果你想从 $tag 中移除所有的空格,为什么不直接:

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

如果你想删除新的行,这样会需要更多一点..。

若要去除 任何空格,可以使用正则表达式

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

另请参阅 这个答案了解可以处理 UTF-8字符串中的空格的内容。

有时你需要删除连续的空格,你可以这样做:

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

产出:

My name is

任何可能的选择都是使用自定义文件包装器将变量模拟为文件。你可以这样做:

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://protocol 上使用包装器的任何文件函数(你也可以使用它来包含、要求等) :

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

您可以使用修剪功能从 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

系统: PHP4,5,7
文档: < a href = “ http://php.net/Manual/en/Function.trim.php”rel = “ nofollow norefrer”> http://php.net/manual/en/function.trim.php

默认情况下,正则表达式不考虑 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
);

这将解释并删除 给你中的制表符、换行符、垂直制表符、 formfeed、回车符、空格以及其他内容:

下一行,不可分隔空间,蒙古语元音分隔符,[ en quad,em quad,en space,em space,three-per-em space,four-per-em space,six-per-em space,figure space,标点符号空间,thin space,hair space,zero width space,zero width non-jier,zero width jier ] ,行分隔符,段分隔符,窄的不可分隔空间,中等数学空间,word jier,表意空间,以及零宽度不换行空格。

当从自动化工具或网站导出 xml 文件时,这些文件中的许多都会造成严重破坏,这些工具或网站会扰乱文本搜索、识别,并且可以无形地粘贴到 PHP 源代码中,这会导致解析器跳到 跳到下一个指挥部(段落和行分隔符) ,从而导致代码行被跳过,从而导致间歇性的、无法解释的错误,我们已经开始称之为“文本传播疾病”

[从网页上复制粘贴已经不安全了。使用字符扫描器来保护你的代码。 lol ]

也可以使用 preg_replace_callback函数。这个函数和它的兄弟函数 preg_replace是相同的,除了它可以接受一个回调函数,这个回调函数可以让你更好地控制如何操作输出。

$str = "this is a   string";


echo preg_replace_callback(
'/\s+/',
function ($matches) {
return "";
},
$str
);

是旧的职位,但可以这样做:

if(!function_exists('strim')) :
function strim($str,$charlist=" ",$option=0){
$return='';
if(is_string($str))
{
// Translate HTML entities
$return = str_replace("&nbsp;"," ",$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;

当出现 HTML 实体时,标准 Trim ()函数可能是一个问题。这就是为什么我写了“超级修剪”函数什么是用来处理这个问题,也可以选择是修剪从开始,结束或摊位一侧的字符串。

从整个字符串中删除空格的一个简单方法是使用爆炸函数并使用 for 循环打印整个字符串。

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


echo $a[$i];
}

S regex 参数与 UTF-8多字节字符串不兼容。

这个 PHP 正则表达式是我用基于 PCRE (Perl 兼容正则表达式)的参数替代 UTF-8字符串来解决这个问题的一个例子:

function remove_utf8_whitespace($string) {
return preg_replace('/\h+/u','',preg_replace('/\R+/u','',$string));
}

- 例子用法-

以前:

$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)
$string = trim(preg_replace('/\s+/','',$string));

有一些特殊类型的空格以标记的形式出现。 你需要利用

$str=strip_tags($str);

去掉多余的标签,错误标签,首先得到一个正常的字符串。

和使用

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

这是我的工作。

这是一个老职位,但最短的答案没有在这里列出,所以我现在添加它

strtr($str,[' '=>'']);

另一种常见的方法“剥这只猫的皮”将使用这样的爆炸和内爆

implode('',explode(' ', $str));