用php如何过滤16进制的字符串 我现在使用 addcslashes($value, "\000\n\r\\'\"\032") 过滤过的。如果要过滤所有16进制的我应该怎么修改addcslashes后面的参数呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to: Meteorlet$value = "\xE3";echo addslashes($value);addslashes 是不行的,我希望输出的是"\xE3"字符串,而不是这个16进制表示的字符 "\xE3" 就是字符,'\xE3'才是字符串。 不管是字符还是字符串,字符串中含有这样的16进制表示,如何把这些替换掉或者干脆删除呢?谁能告诉我,如何把"Delete\xB7\xBF\xB2\xFA?"里面的所有16进制表示全部删除或者替换!或者输出"Delete\xB7\xBF\xB2\xFA?",而不是像现在输出的是"Delete����" ���� CSDN转换过了,实际上我看到的是一个个框框 ctype_xdigit -- Check for character(s) representing a hexadecimal digit 检查是否是16进制的字符串 $str = stripslashes($str);$str = mysql_escape_string($str); to gzty(【风逍遥】123笨小孩天天快乐) 不行~~ctype_xdigit只能用来检查字符串中都是16进制的情况。而我的情况是字符串中有一部分是。to Mistruster(弱智d) mysql_escape_string也许可以,但是这样的处理方法不透明,这样处理还是不知道这个字符串中是否含有16进制表示的内容,因此也无法做相应的程序判断。 用正则应该比较简单吧\\x[a-zA-Z0-9]{2} 要看你的数据来源是什么了如果直接就是 $value = "\xE3"; 基本上不好办如果是读文本文件里的字符串,其中包括它 \xE3 那你就直接用 mysql_escape_string 删除十六进制字符:ereg_replace('/\x80-\xFF/', '', $str);删除十六进制形式的字符串:ereg_replace('/\\\\x[0-9A-F]{2}/', '', $str);如果要保存十六进制字符串,请用binary字段 to Meteorlet:$str = ereg_replace("/\x80-\xFF/", '', $str);这个什么也替换不了吧,应该写成:$str = ereg_replace("[\x80-\xFF]", '', $str);但这样就把汉字换没了用这个$str = "Delete\xB7\xBFa\xFA 汉字";$str = ereg_replace("[^\x80-\xFF][\x80-\xFF][^\x80-\xFF]", '', $str);好象也不对,碰到这种情况就不知道了怎么办了$str = "\xFA汉字";大家继续…… 或许下面这个可能对你有帮助【字符串跟十六进制的互换】http://blog.tonyang.com/?action=show&id=126 /** * (字符串16进制编码/解码 ) * * @access public * @param string $string 需要进行编码解码的字串 * @return string */ function hexEncode($str=null){ return preg_replace('/(.)/es', "str_pad(dechex(ord('\\1')),2,'0',STR_PAD_LEFT)", $str); } function hexDecode($str=null){ return preg_replace('/(\w{2})/e',"chr(hexdec('\\1'))",$str); } 问一下关于mysqli的store_result()和PDO的fetch_all()的区别 PHP怎么分页? 小弟新做的PHP学习网站!大家来PP 如何批量增加数据到数据库? 关于php数组的问题 PHP使用gettext国际化的问题(解决了给分500) 配置问题,有经验的人说说 php怎样实现只准一个用户登陆? 怎么把echo “dddddd”转化成html文件的格式输出! onethink中 list_to_tree 函数 是如何返回数组的 谁能解释这种写法是什么意思:<?= @$user ?> 请教关于上传语句,谢谢
echo addslashes($value);addslashes 是不行的,我希望输出的是"\xE3"字符串,而不是这个16进制表示的字符
-- Check for character(s) representing a hexadecimal digit
检查是否是16进制的字符串
$str = stripslashes($str);
$str = mysql_escape_string($str);
如果是读文本文件里的字符串,其中包括它 \xE3 那你就直接用 mysql_escape_string
ereg_replace('/\x80-\xFF/', '', $str);
删除十六进制形式的字符串:
ereg_replace('/\\\\x[0-9A-F]{2}/', '', $str);如果要保存十六进制字符串,请用binary字段
$str = ereg_replace("/\x80-\xFF/", '', $str);
这个什么也替换不了吧,应该写成:
$str = ereg_replace("[\x80-\xFF]", '', $str);但这样就把汉字换没了用这个
$str = "Delete\xB7\xBFa\xFA 汉字";
$str = ereg_replace("[^\x80-\xFF][\x80-\xFF][^\x80-\xFF]", '', $str);
好象也不对,碰到这种情况就不知道了怎么办了
$str = "\xFA汉字";大家继续……
【字符串跟十六进制的互换】http://blog.tonyang.com/?action=show&id=126
* (字符串16进制编码/解码 )
*
* @access public
* @param string $string 需要进行编码解码的字串
* @return string
*/
function hexEncode($str=null){
return preg_replace('/(.)/es', "str_pad(dechex(ord('\\1')),2,'0',STR_PAD_LEFT)", $str);
}
function hexDecode($str=null){
return preg_replace('/(\w{2})/e',"chr(hexdec('\\1'))",$str);
}