当表单提交生僻字,如"芢".
经过转义后会变成:芢\
这样在写入数据库时产生类似:update tablename set username = '芢\' where userid = '1'
程学会报错.
请问有何解决办法.不要说不转义或者过滤\.因为可能会出现提交1234'abcd芢之类的情况,正常情况应该转义成1234\'abcd芢,但是因为有个"芢",会被转义成1234\'abcd芢\
经过转义后会变成:芢\
这样在写入数据库时产生类似:update tablename set username = '芢\' where userid = '1'
程学会报错.
请问有何解决办法.不要说不转义或者过滤\.因为可能会出现提交1234'abcd芢之类的情况,正常情况应该转义成1234\'abcd芢,但是因为有个"芢",会被转义成1234\'abcd芢\
还有,把库设为utf8看看
你可以考虑转义时只转义“'”
$txt = str_replace("'", "\\'", $txt);
如果POST的数据是1234'5678"abcd\啊啊芢,怎么办.单单处理单引号不行的
而且我测试过了,如果get_magic_quotes_gpc()没开
$value = $_POST['values'];
然后
$value = str_replace('"','\\"',$value);
这样没问题
$value = str_replace("'","\\'",$value);
这样也没问题
$value = str_replace('\\','\\\\',closeEscape($value));
这样就来问题
POST过来的数据变成了,芢\
另外更郁闷的是如果直接写一句
$value = '芢';
程序直接报错
为什么不行?
除了单引号,其他传入的字符(不是代码中的)都不会出现问题
而传入的 \ 已然是 \ 了,不会产生歧义例
设 test.txt 的内容为
\则
$s = file_get_contents('test.txt');
echo $s; //将输出 \
echo "$s"; //同样输出 \ 而不会出错
而
echo "\"; //写成这样就不能通过语法检查
echo "\\"; //只能写成这样,才可以输出 \
先把转义关了
$magic_quotes_gpc = get_magic_quotes_gpc();
if($magic_quotes_gpc) {
$_POST = stripslashes($_POST);
$_GET = stripslashes($_GET);
}然后
$a = $_POST['a'];
写进数据库,前面数据库联接什么的全省略
mysql_query('update tablename set titlename = \'' . addslashes($a) . '\' where id = \'1\'');
如果POST的字符是"我的名字叫李芢",报错
如果像你说的只处理单引号,那么POST的字符是"我的名字叫李\",还是报错
只要处理"\",那么遇到少数几个生僻中文就会有问题
你还不明白我的意思
先把转义关了
$magic_quotes_gpc = get_magic_quotes_gpc();
if($magic_quotes_gpc) {
$_POST = stripslashes($_POST);
$_GET = stripslashes($_GET);
}
magic_quotes_gpc
从5.4开始已经取消并固定为打开,适应一下吧“芢”的GBK内码为C65C,所有5C结尾的汉字都会有类似问题,你可以自己搞个字表(也不多)
因为汉字GBK没有5C开头的,所以只考虑后半部分的字节就行同样的问题也会出现在后半部为7C的汉字应对方案自己想吧,多的是,找个合适自己网站的就行