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

kyl*_*lex 3 php mysql whitespace trim utf-8

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

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

如果我进入数据库并将其退出,它会正确保存.它只是没有通过trim()函数删除.

Bob*_*ein 12

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

不间断空间的UTF-8字符编码Unicode(U + 00A0)是2字节序列 C2 A0.我试图使用第二个参数,trim()但没有做到这一点.使用示例:

assert("abc" === UberTrim("  \r\n  \xc2\xa0  abc  \t \xc2\xa0   "));
Run Code Online (Sandbox Code Playgroud)

TRIM(text_field)由于@RudolfRein的评论,MySQL替换它也会删除UTF不间断空格:

TRIM(REPLACE(text_field, '\xc2\xa0', ' '))
Run Code Online (Sandbox Code Playgroud)

UTF-8清单:

(这里有更多检查)

  1. 确保您的PHP源代码编辑器在在没有BOM的情况下编码为UTF-8(Notepad ++) 没有BOM的 UTF-8模式.或者在首选项中设置.

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

    $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" />


小智 5

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

REPLACE(the_field, UNHEX('C2A0'), ' ')
Run Code Online (Sandbox Code Playgroud)