我知道这个评论PHP.net。我希望有一个类似tr
PHP的工具,这样我可以简单地运行
tr -d " " ""
我运行不成功的功能php_strip_whitespace
通过
$tags_trimmed = php_strip_whitespace($tags);
我也未成功运行regex函数
$tags_trimmed = preg_replace(" ", "", $tags);
我知道这个评论PHP.net。我希望有一个类似tr
PHP的工具,这样我可以简单地运行
tr -d " " ""
我运行不成功的功能php_strip_whitespace
通过
$tags_trimmed = php_strip_whitespace($tags);
我也未成功运行regex函数
$tags_trimmed = preg_replace(" ", "", $tags);
Answers:
默认情况下,正则表达式不解释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,3个em空间,4个em空间,6个em空间,图形空间,标点空间,稀疏空间,头发空间,零宽度空间,零宽度非连接符,零宽度连接符],行分隔符,段落分隔符,狭窄的不间断空间,中等数学空间,单词连接符,表意空格和零宽度非打破空间。
当从自动化工具或站点导出时,其中许多破坏性的XML文件破坏了文本搜索,识别,并且可以不可见地粘贴到PHP源代码中,这导致解析器跳转到下一个命令(段落和行分隔符),从而导致行被跳过的代码会导致间歇性,无法解释的错误,我们已开始将其称为“文字传播疾病”
[从网络上复制和粘贴不再安全。使用字符扫描仪来保护您的代码。大声笑]
trim()
应该是正确的答案
+
后s
?您不需要它。
您可以使用php中的trim功能修剪两侧(左右)
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/zh/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://协议上将任何文件函数与包装器一起使用(也可以将其用于include,require等):
global $__myVar;
$__myVar = 'Enter tags here';
$data = php_strip_whitespace('var://__myVar');
注意:不要忘记在全局范围内使用变量(例如全局$ __ myVar)
global $$varname;
2013
您可以通过使用 ereg_replace
$str = 'This Is New Method Ever';
$newstr = ereg_replace([[:space:]])+', '', trim($str)):
echo $newstr
// Result - ThisIsNewMethodEver
您还可以使用preg_replace_callback
function。该函数与其兄弟姐妹相同,不同之处在于preg_replace
它可以使用回调函数,该函数可让您更好地控制输出的方式。
$str = "this is a string";
echo preg_replace_callback(
'/\s+/',
function ($matches) {
return "";
},
$str
);
preg_replace
吗?
是旧帖子,但可以这样做:
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;
当HTML实体出现时,标准trim()函数可能会出现问题。这就是为什么我编写了“ Super Trim”功能来处理此问题的原因,并且您还可以选择从字符串的开头,结尾或展位边进行修剪。
从整个字符串中删除空格的一种简单方法是使用explode函数,并使用for循环打印整个字符串。
$text = $_POST['string'];
$a=explode(" ", $text);
$count=count($a);
for($i=0;$i<$count; $i++){
echo $a[$i];
}
\ s regex参数与UTF-8 multybyte字符串不兼容。
我写了这个PHP RegEx,使用基于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)