如何使用PHP删除所有类型的不间断空格

3

我将从Html文件中保存一个字符串到我的数据库中。但是我无法将这个字符串修剪并去除空格。

我创建了这个简化的函数来总结问题以及我迄今为止尝试过的方法。

<?php

function get_content($html)
{
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $div = $dom->getElementById('whitespace');
    $content = $div->textContent;
    # Goal:  trim leading, trailing, and non-breaking space
    $content = str_replace('&nbsp;','',$content);
    $content = str_replace('U+00A0','',$content);
    $content = str_replace('\u00a0','',$content);
    $content = str_replace('\xa0','',$content);
    $content = str_replace(chr(160),'',$content);

    $content = trim($content);
    return $content;
}

file_put_contents(
    'trim.output',
    get_content('<div id="whitespace">&nbsp; &nbsp; &nbsp; TuffToTrim</div>'
));
?>

输出结果为:
      TuffToTrim

虽然我希望它是这样的:

TuffToTrim

我现在有点绝望 :) 有什么想法吗?


我认为您只替换非断空格,但保留普通空格。通过 $content = str_replace(' ','',$content); 替换它们。 - ivion
也许需要先转换:$content = htmlentities($content, null, 'utf-8'); $content = str_replace(" ", "", $content); - equi
$div->textContent&nbsp; 的处理有些奇怪。当您直接将文本粘贴到 $content 中时,一切都正常。我知道这还没有帮助 - 但它可能会提示您进一步搜索的方向。 - Jeff
@equi 谢谢!那是完美的解决方案。我也学到了 htmlentities 和 htmlspecialchars。 - Stoyan Georgiev
@StoyanGeorgiev 不用谢。我很高兴它有帮助。我会将其发布为答案,以便也能帮助其他人。 - equi
2个回答

3

替代方案

$content = str_replace('&nbsp;','',$content);
$content = str_replace('U+00A0','',$content);
$content = str_replace('\u00a0','',$content);
$content = str_replace('\xa0','',$content);
$content = str_replace(chr(160),'',$content);
$content = trim($content);

你应该使用

$content = preg_replace('/[\s]+/mu', '', $content);

0

首先应该将其转换为HTML实体,然后就可以替换字符了。

$content = htmlentities($content, null, 'utf-8'); 
$content = str_replace("&nbsp;", "", $content);

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