用 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 修剪的主要内容,如果未能解决你的问题,请参考以下文章