我在MySQL文本字段的段落开头有一些空格。
在PHP中使用trim($var_text_field)
或在MySQL语句中使用TRIM(text_field)
绝对没有。这个空白是什么,我如何通过代码删除它?
如果我进入数据库并将其退出,则可以正常保存。它只是没有通过trim()函数删除。
答案 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', ' '))
(更多检查here)
确保您的 PHP 源代码编辑器位于 UTF-8 mode without BOM 。或者设置在preferences。
确保您的 MySQL 客户端设置为UTF-8字符编码(更多here和here),例如
$pdo = new PDO('mysql:host=...;dbname=...;charset=utf8',$userid,$password);
$pdo->exec("SET CHARACTER SET utf8");
确保您的 HTTP 服务器设置为UTF-8,例如对于Apache:
AddDefaultCharset UTF-8
确保浏览器需要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实体,比如
,当然没有修剪功能会有所帮助。
我建议像这样打印出来
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