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

2022-08-30 08:16:56

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

tr -d " " ""

我运行该函数失败php_strip_whitespace

$tags_trimmed = php_strip_whitespace($tags);

我运行正则表达式函数也失败了

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

答案 1

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

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

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


答案 2

默认情况下,正则表达式不考虑 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空格,em空格,三个em空格,四个per-em空格,6-per-em空格,图形空间,标点空格,薄空间,头发空间,零宽度空间,零宽度非连接符,零宽度连接器],行分隔符,段落分隔符,窄不换行空格,中等数学空间,单词连接器,表意空间和零宽度不间断空格。

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

[从网络复制和粘贴不再安全。使用字符扫描程序保护您的代码。哈哈]


推荐