trim()不会删除数据库字段中的空格

时间:2011-03-14 07:41:51

标签: php mysql utf-8 whitespace trim

我在MySQL文本字段的段落开头有一些空格。

在PHP中使用trim($var_text_field)或在MySQL语句中使用TRIM(text_field)绝对没有。这个空白是什么,我如何通过代码删除它?

如果我进入数据库并将其退出,则可以正常保存。它只是没有通过trim()函数删除。

7 个答案:

答案 0 :(得分:12)

function UberTrim($s) {
    $s = preg_replace('/\xA0/u', ' ', $s);  // strips UTF-8 NBSP: "\xC2\xA0"
    $s = trim($s);
    return $s;
}

不间断空间的UTF-8字符编码Unicode(U + 00A0)是2-byte sequence C2 A0。我试图利用second parameter to trim()但是没有做到这一点。使用示例:

assert("abc" === UberTrim("  \r\n  \xc2\xa0  abc  \t \xc2\xa0   "));

MySQL TRIM(text_field)的替代品,也取消了UTF不间断空格,感谢@ RudolfRein的评论:

TRIM(REPLACE(text_field, '\xc2\xa0', ' '))

UTF-8清单:

(更多检查here

  1. 确保您的 PHP 源代码编辑器位于Encode in UTF-8 without BOM (Notepad++) UTF-8 mode without BOM 。或者设置在preferences

  2. 确保您的 MySQL 客户端设置为UTF-8字符编码(更多herehere),例如

    $pdo = new PDO('mysql:host=...;dbname=...;charset=utf8',$userid,$password); $pdo->exec("SET CHARACTER SET utf8");

  3. 确保您的 HTTP 服务器设置为UTF-8,例如对于Apache

    AddDefaultCharset UTF-8

  4. 确保浏览器需要UTF-8。

    header('Content-Type: text/html; charset=utf-8');

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

答案 1 :(得分:3)

如果问题出在UTF-8 NBSP上,另一个简单的选择是:

REPLACE(the_field, UNHEX('C2A0'), ' ')

答案 2 :(得分:2)

尝试使用ORD()上的MySQL text_field函数检查最左侧字符的字符代码。它可以是出现的非空白字符,就像空格一样。

答案 3 :(得分:2)

最好的解决方案是已经提到的一些事情的组合。

首先在有问题的字符串上运行ORD()。在我的情况下,我必须先反向运行,因为我的问题字符位于字符串的末尾。

ORD(REVERSE([col name])) 

一旦发现有问题的字符,请运行

REPLACE([col_name], char([char_value_returned]), char(32))

最后,拨打一个正确的

TRIM([col_name])

这将完全根除字符串的所有方面的问题字符,并修剪前导(在我的情况下是尾随)字符。

答案 4 :(得分:1)

你必须首先检测这些“空白”字符。如果它是某个HTML实体,比如&nbsp;,当然没有修剪功能会有所帮助。

我建议像这样打印出来

echo urlenclde($row['field']);

看看它的内容

作为其A0(或160个十进制)不间断空格字符,您可以先将其转换为序数空间:

<pre><?php
$str = urldecode("%A0")."bla";
var_dump(trim($str));
$str = str_replace(chr(160)," ",$str);
$str = trim($str);
var_dump($str);

和ta-dam! -

string(4) " bla"
string(3) "bla"

答案 5 :(得分:0)

尝试通过编写字符代码来检查每个“空白”的字符 - 它可能是一个不可见的字符类型,不会被修剪删除。 修剪只删除一些字符,如空格,制表符,换行符,CR和NUL,但是存在可能导致此问题的其他不可见字符。

答案 6 :(得分:-1)


str_ireplace(array("\r", "\n", "\t"), $var_text_field