mysql 遇到特殊字符,造成了数据不全

honghua1207 2014-12-23 03:10:48
我是把数组序列化之后存入数据库的某个字段,但是数组中有些数据的值带有特殊字符,如图:

保存在数据库之后就成这样子了


类似这样的特殊字符还有很多的;

丢失了一部分数据,哪位哥哥遇到过这种情况吗?请赐教。
...全文
983 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sa1176732685 2014-12-24
  • 打赏
  • 举报
回复
不是前台输入什么,数据库就要存什么的,输入要做一下限制,然后再存。可以跟上级沟通一下。
傲雪星枫 2014-12-23
  • 打赏
  • 举报
回复
龙华
傲雪星枫 2014-12-23
  • 打赏
  • 举报
回复
把不是utf8的字符過濾就可以了。

header('Content-type: text/html;charset=utf-8');
$s = '6b6Z5Y2O8K+gpTEyMzEyMzEyMw==';
$t = base64_decode($s). PHP_EOL;
echo $t.'<br>';
echo filter_utf8_char($t);

/** 過濾字符串,保留UTF8字母數字中文及部份符號 
*   @param  String  $ostr 
*   @return String 
*/  
function filter_utf8_char($ostr){  
    preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $ostr, $matches);  
    $str = join('', $matches[0]);  
    if($str==''){   //含有特殊字符需要逐個處理  
        $returnstr = '';  
        $i = 0;  
        $str_length = strlen($ostr);  
        while ($i<=$str_length){  
            $temp_str = substr($ostr, $i, 1);  
            $ascnum = Ord($temp_str);  
            if ($ascnum>=224){  
                $returnstr = $returnstr.substr($ostr, $i, 3);  
                $i = $i + 3;  
            }elseif ($ascnum>=192){  
                $returnstr = $returnstr.substr($ostr, $i, 2);  
                $i = $i + 2;  
            }elseif ($ascnum>=65 && $ascnum<=90){  
                $returnstr = $returnstr.substr($ostr, $i, 1);  
                $i = $i + 1;  
            }elseif ($ascnum>=128 && $ascnum<=191){ // 特殊字符  
                $i = $i + 1;  
            }else{  
                $returnstr = $returnstr.substr($ostr, $i, 1);  
                $i = $i + 1;  
            }  
        }  
        $str = $returnstr;  
        preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $str, $matches);  
        $str = join('', $matches[0]);  
    }  
    return $str;  
}  
honghua1207 2014-12-23
  • 打赏
  • 举报
回复
因为前端阻止不了用户的输入,需要后端过滤掉这些数据,然后才插入数据库的。 不然数据库里显示的信息不全。
xuzuning 2014-12-23
  • 打赏
  • 举报
回复
你在做什么?
header('Content-type: text/html;charset=utf-8');
$s = '6b6Z5Y2O8K+gpTEyMzEyMzEyMw==';
$t = base64_decode($s), PHP_EOL;
echo bin2hex($t);
e9be99e58d8ef0afa0a5313233313233313233 不是跟你说了吗?那是表情符,PC 中的浏览器都是不会显示的
honghua1207 2014-12-23
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
header('Content-type: text/html;charset=utf-8');
$s = '6b6Z5Y2O8K+gpQ==';
echo $t = base64_decode($s), PHP_EOL;
echo bin2hex($t);
龙华
header('Content-type: text/html;charset=utf-8');
$s = '6b6Z5Y2O8K+gpTEyMzEyMzEyMw==';
echo $t = base64_decode($s), PHP_EOL;
echo pack("H*", bin2hex($t));
这样的就不行诶~~ 而且中间应该不是空格
xuzuning 2014-12-23
  • 打赏
  • 举报
回复
header('Content-type: text/html;charset=utf-8');
$s = '6b6Z5Y2O8K+gpQ==';
echo $t = base64_decode($s), PHP_EOL;
echo bin2hex($t);
龙华
honghua1207 2014-12-23
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
请给出真实的数据
数据就是那些,我不知道还缺哪些数据? 特殊的字符我这里显示不出来。
honghua1207 2014-12-23
  • 打赏
  • 举报
回复
引用 1 楼 fdipzone 的回复:
什麼特殊字符,把字符串base64_encode後發出來看看。

xuzuning 2014-12-23
  • 打赏
  • 举报
回复
请给出真实的数据
honghua1207 2014-12-23
  • 打赏
  • 举报
回复
引用 2 楼 honghua1207 的回复:
[quote=引用 1 楼 fdipzone 的回复:] 什麼特殊字符,把字符串base64_encode後發出來看看。
[code=php]$str = '龙华[/quote] 我还是截图吧
honghua1207 2014-12-23
  • 打赏
  • 举报
回复
竟然不让贴php代码 $str = '龙华
honghua1207 2014-12-23
  • 打赏
  • 举报
回复
引用 1 楼 fdipzone 的回复:
什麼特殊字符,把字符串base64_encode後發出來看看。
[code=php]$str = '龙华
傲雪星枫 2014-12-23
  • 打赏
  • 举报
回复
什麼特殊字符,把字符串base64_encode後發出來看看。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧