使用 PHP 进行修剪

问题描述 投票:0回答:9

我有这样一句话。

1       2     3   4

如您所见,在 1、2 和 3 个文本之间有多余的空格。我希望输出之间只有一个空格。所以我的输出将是

1 2 3 4

如果我使用trim,它只能删除空格,但不能删除空格

 
如何使用PHP的trim函数来获得这样的输出?

php string replace
9个回答
61
投票

在 php.net 找到这个,效果很好:

$myHTML = " abc"; 
$converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); 
trim($converted, chr(0xC2).chr(0xA0));

来源:http://php.net/manual/en/function.trim.php#98812


44
投票

对于那些只想进行修剪的人来说,更具包容性的答案:

$str = trim($str, " \t\n\r\0\x0B\xC2\xA0");

相同的修剪处理 html 实体:

$str = trim(html_entity_decode($str), " \t\n\r\0\x0B\xC2\xA0");

这里的 PHP 文档概述了 html_entity_decode 和修剪交互: http://php.net/manual/en/function.html-entity-decode.php#refsect1-function.html-entity-decode-notes


35
投票
$str = "1 $nbsp;     2     3   4";
$new_str = str_replace(" ", '', $str);

11
投票
$str = " abc ";

echo trim($str, "\xC2\xA0"); //abc

9
投票

回答有点晚了,但希望对其他人有帮助。从html中提取内容时最重要的是在php中使用utf8_decode()。然后所有其他字符串操作都变得轻而易举。即使是外来字符也可以通过直接从浏览器复制粘贴字符到 php 代码中来替换。以下函数将

 
替换为空格。然后使用
preg_replace()
将所有多余的空格替换为单个空格。最后删除前导和尾随空格。

function clean($str)
{       
    $str = utf8_decode($str);
    $str = str_replace(" ", " ", $str);
    $str = preg_replace('/\s+/', ' ',$str);
    $str = trim($str);
    return $str;
}

$html = "1 $nbsp;     2     3   4";
$output = clean($html);
echo $output;

1 2 3 4


2
投票

如果你的字符串实际上有“ ”,

$str="1       2     3   4";
$s = str_replace("  ","",$str);
print $s;

1
投票
echo str_replace ( " ", "", "1       2     3   4" );

只需记住您需要回显 str_replace 的结果,并且您也无需担心空格,因为浏览器只会显示一个空格。


1
投票

这对我来说很有效:
preg_replace('~\x{00a0}~siu',' ',$content);


0
投票

上面@Chaoix的答案会破坏你的字符串,如果它以字符开头:

·
https://www.fileformat.info/info/unicode/char/b7/index.htm)。如果您的文档包含项目符号列表并且您按行或每组行进行修剪,则通常会发生这种情况。

这是因为一些 UTF8 字符是使用 0xC2 和另一个块组成的。对于中间的点,它是 0xC2 0xB7。

我猜 Chaoix 想要精确地修剪“\xC2\xA0”,但是 PHP 修剪函数对每个字符应用一个字符,因此它会修剪 \xC2 和 \xA0 (因此它会破坏由 \xC2 生成的所有 UTF 字符)。

因此,更稳健的方法是:

trim(preg_replace('/^\xc2\xa0|\xc2\xa0$/', '', $str), " \t\n\r\0\x0b")
© www.soinside.com 2019 - 2024. All rights reserved.