根据最近项目整理 -- 有些特殊字符的存储展示会有问题,解决方案如下:
字符编码: " 经过ThinkPHP的I 转换为 " < < > > & & 如果用 模板变量直接引用则可以还原,但是用js赋值则不能。js还原函数: function restore_str_js(str){ var str = str.replace('"','"'); str = str.replace('<',''); str = str.replace('&','&'); str = str.replace('char(10)','\r\n');//将换行符 还原展示于页面 return str; } 换行符的处理: textarea 有时候用户会插入换行符,但是不加处理插入到数据库中的时候会出错。 php处理之后存入数据库: //将换行符替换为一个特殊标记,页面展示时还原 function filter_enter($str){ $str = str_replace(array("\r\n", "\r", "\n"), 'char(10)', $str); //把用户输入的回车替换成一个特殊字符 //textarea return $str; } 若为js读取:str = str.replace('char(10)','\r\n');//将换行符 还原展示于页面 若为模板变量: //模板直接引用变量时 转换成换行符 function restore_enter($str){ $str = str_replace('char(10)','
',$str);//将换行符 还原展示于页面 return $str; } \反斜杠的处理: I函数对\不加处理,但是在sql查询语句中就会出错。正确的sql语句: SELECT * FROM `a` where Word like '%\\'; 结果:ASPERT\ 即1个反斜杠\要在查询之前转成2个反斜杠\\: //将 \一个反斜杠转化为 \\两个反斜杠,用于数据库查询 function filter_str($str){ $str = str_replace("\\","\\\\",$str); return $str; } 如果数据库中的\是原样存储的,直接读取赋给模板变量,展示也是有问题的。 //将\反斜杠转换为\;(html实体)用于展示于页面 function restore_str($str){ $str = str_replace("\\","\",$str); return $str; } 如果用js读取: php: $this->assign('name', filter_str($name)); //为了反斜杠 不然就一个反斜杠,后面和字符连起来转义乱码 js: var name = "{$name}";