LMLPHP后院

PHP trim 函数引发崩溃且数据库保存失败技术

maybe yes 发表于 2019-06-30 07:21

请慎用 PHP 的 trim 函数来去除额外的头尾字符,否则可能带来意外的不合法字符

请看下面的例子🌰

var_dump(trim('血'));
var_dump(trim('血', ' '));
var_dump(preg_replace('/^ | $/', '', ' 血 '));

return;

输出

string(3) "血"
string(2) "?"
string(3) "血"

上面的例子是用来去除文字两边的中文全角空格,结果在个别字结尾的时候就出现来问号,这个特殊的编码的字符导致数据库保存失败,直接 crash。

LmlException: HY000
1366
Incorrect string value: '\xE8\xA1</p>...' for column 'content' at row 1 in .php:109
Stack trace:

版本

PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

所以,还是正则匹配比较安全,trim 是不安全的。

2019-12-14 18:54:29 1576320869 0.046943