如何在PHP中去除字符串开头和结尾的尾随空格和" "?

4
如果
$text = '           MEANINGFUL THINGS GO HERE         ';

如何获取?
$cleanText = 'MEANINGFUL THINGS GO HERE';

我知道以下代码可以去除所有空格:

$text=trim($text);

但是如何将实际转义空格合并到修剪中呢? 有意义的事情 可以包含 [短代码],html 标签,还有转义字符。我需要保留它们。
任何帮助将不胜感激。 谢谢!
3个回答

8
$text = '           MEANINGFUL THINGS GO HERE         ';

$text = preg_replace( "#(^( |\s)+|( |\s)+$)#", "", $text );

var_dump( $text );

//string(25) "MEANINGFUL THINGS GO HERE"

额外测试

$text = '       S       S    ';
-->
string(24) "S       S"

$text = '                  ';
-->
string(0) ""

$text = '         &nbst; &nbst;      ';
-->
string(18) "&nbst; &nbst;"

3

同时对此进行一个html_entity_decode,然后进行修剪:

$text=trim(html_entity_decode($text));

1
如果我的“有意义的事情”中有短代码和转义字符,它们会被保留吗?我不想让任何东西触及到“有意义的事情”。最后应该做反向转换吗? - Mohammad
你可以再次使用 htmlentities,但是仍然不能保证“有意义的内容”不会被更改,但本质上应该是相同的。 - Ashley Strout
我喜欢这个想法,解决方案看起来非常干净和高效,但我认为我会害怕将其放入生产代码中,因为它依赖于PHP的完整性来执行这些镜像转换。我会测试它,但我不确定我能够彻底测试以确保它是无瑕疵的。 - Mohammad

0
关于@Esailija的“已接受”答案...
那么,对于` `、` `、` `、` `、` `、` `等等... 这样做会更完整吗?
$txt = preg_replace('/(^((\&((nbsp)|(((hair)|(very)?(thin))sp(ace)?)|(\#820(1|2)))\;)|(\x{2009}\|\x{200a})|(\s))+|((\&((nbsp)|(((hair)|(very)?(thin))sp(ace)?)|(\#820(1|2)))\;)|(\x{2009}\|\x{200a})|(\s))+$)/imu', '', $txt);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接