用 PHP 修剪

Posted

技术标签:

【中文标题】用 PHP 修剪【英文标题】:Trim   with PHP 【发布时间】:2011-02-01 00:56:08 【问题描述】:

我有这样一句话。

1       2     3   4

如您所见,在 1 2 和 3 文本之间,有多余的空格。我想要它们之间只有一个空格的输出。所以我的输出将是1 2 3 4

如果我使用trim,它只能删除空格,但不能删除  如何使用php trim 函数来获得这样的输出?

【问题讨论】:

【参考方案1】:

在 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

【讨论】:

您注意到缺少括号了吗? @Deele 我并不总是测试我的代码,但是当我这样做时,我会在生产环境中进行。 有趣的是,当字符只是 0xA0 时,浏览器实际上会显示  。我花了你的答案才意识到这一点并修复了我的 bug 也可以通过输入"\xC2\xA0"来制作。 它也可以在没有第二行的情况下工作。第二行是干什么用的?【参考方案2】:
$str = "1 $nbsp;     2     3   4";
$new_str = str_replace(" ", '', $str);

【讨论】:

PHP 代码在服务器而不是客户端解释。浏览器永远不会看到它。【参考方案3】:

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

$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

【讨论】:

这不会剥离  当它只是一个 6 个字符的字符串时。 @ArtemRussakovskii:它不应该剥离  因为那是一个 html 实体,不适合修剪。如果你想剪掉多余的  首先在字符串上使用 html_entity_decode 是合适的解决方案。 注意:此解决方案可能会损坏字符串开头/结尾处的其他字符,因为 trim() 将单独查看每个字节!例如。 echo trim('´test´', " \t\n\r\0\x0B\xC2\xA0"); 将通过删除第一个字节来破坏第一个字符!【参考方案4】:
$str = " abc ";

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

【讨论】:

一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。 经过多次测试它对我有用,我想这取决于 DB 编码......哦,我真的不知道为什么 ^_^' 我在尝试格式化从 TinyMCE 返回的文本时遇到了这个问题,这对我来说非常有用! 注意:此解决方案可能会损坏字符串开头/结尾处的其他字符,因为 trim() 将分别查找 \xC2\xA0!例如。 echo trim('´test´', "\xC2\xA0"); 将通过删除第一个字节来破坏第一个字符!【参考方案5】:

回答有点晚了,但希望可以帮助其他人。从 html 中提取内容最重要的是在 php.ini 中使用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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:
echo str_replace ( " ", "", "1       2     3   4" );

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

【讨论】:

以上是关于用 PHP 修剪的主要内容,如果未能解决你的问题,请参考以下文章

PHP php修剪数组中的alle元素

在 PHP 中自动修剪 mp3

php 修剪数组(递归)

php SHORTCODE:将“类型”字段修剪为“字数”

php 相应修剪单词

php 缩短内容文本,修剪内容