删除空格php

dgiusagp  于 2022-12-10  发布在  PHP
关注(0)|答案(5)|浏览(154)

我需要删除字符串中的所有标记,使其不带空格。
我有绳子

"<span class="left_corner"> </span><span class="text">Adv</span><span class="right_corner"> </span>"

在使用strip_tags之后,我得到了string

" Adv "

使用trim函数我不能删除空格。
JSON字符串看起来像“\u00a0...\u00a0”。
请帮我删除这些空格。

nkhmeac6

nkhmeac61#

此问题的解决方案
$str = trim($str, chr(0xC2).chr(0xA0))

ygya80vv

ygya80vv2#

您应该使用preg_replace(),以使其具有多字节安全性。

$str = preg_replace('/^[\s\x00]+|[\s\x00]+$/u', '', $str);
  • 备注 *:
  • 这将修复初始化@Анд р ей-Се р д к的问题:它将修剪\u00a0,因为\s也匹配Unicode不间断空格
  • /u修饰符(PCRE_UTF8)告诉PCRE将主题作为UTF8字符串处理
  • \x00匹配空字节字符以模拟默认trim()函数行为

接受@Анд р ей-Се р д к trim()答案将与多字节字符串混淆。
示例:

// This works:
echo trim(' Hello ', ' '.chr(0xC2).chr(0xA0)); 
// > "Hello" 

// And this doesn't work:
echo trim('  Solidarietà  ', ' '.chr(0xC2).chr(0xA0)); 
// > "Solidariet?" -- invalid UTF8 character sequense

// This works for both single-byte and multi-byte sequenses:
echo preg_replace('/^[\s\x00]+|[\s\x00]+$/u', '', ' Hello ');
// > "Hello"
echo preg_replace('/^[\s\x00]+|[\s\x00]+$/u', '', ' Solidarietà '); 
// > "Solidarietà"
hvvq6cgz

hvvq6cgz3#

怎么样:

$string = '" Adv "';
$noSpace = preg_replace('/\s/', '', $string);


http://php.net/manual/en/function.preg-replace.php

ar7v8xwq

ar7v8xwq4#

我使用公认的解决方案 * 多年 *,我一直是错误的。如果我能在2022年找到这个解决方案,其他人也能找到,所以请将公认的解决方案改为@e1v一直是正确的解决方案。
"你不该这么做"

echo trim('Au delà', ' '.chr(0xC2).chr(0xA0));

因为它会破坏UTF-8编码:
Au
请注意,一种“现代”(PHP 7)的编写方式可以是:

echo trim('Au delà', " \u{a0}");//This is WRONG, don't do it!

就我个人而言,当我必须处理字符串中的 * 不可断空格 *(Unicode 00 A0,UTF8 C2 A0)时,我会用 * 常规空格 *(Unicode 0020,UTF8 20)替换尾部/结尾空格,然后修剪字符串。如下所示:

echo trim(preg_replace('/^\s+|\s+$/u', ' ', "Au delà\u{a0}"));

(我会发表评论或只是投票的答案,但我不能)。

aoyhnmkz

aoyhnmkz5#

$str = '<span class="left_corner"> </span><span class="text">Adv</span><span class="right_corner"> </span>';
$rgx = '#(<[^>]+>)|(\s+)#';
$cleaned_str = preg_replace( $rgx, '' , $str );
echo '['. $cleaned_str .']';

相关问题