php, html, javascript, mysql 之间的特殊字符处理

php, html, javascript, mysql 之间的特殊字符处理

特殊字符指在程序中有具有特殊的控制意义的字符,一般来讲各个程序语言所使用
的特殊字符大部分都来源于传统的 C 语言,加上自身的扩展,便较为完整的满足了编程
需求。

程序自身的转义处理能够解决自身的处理需求,问题基本上都集中在程序语言之间
的不同转移策略所带来的匹配差异上。几乎对所有语言来说单引号(‘)和双引号(")
都会带来一些麻烦。

php 中对字符的转义采用反斜杠(\),再与数据库进行交互时采用的函数有:

1 addslashes($str);

这个函数是重新生成一个转义后的字符串,使用时要注意。
    如 $str = ‘""""""""‘;//这个解析没有问题,但是输出时就会出现问题;

1 htmlspecialchars($str);

这个是在输出时处理对 html 具有特殊意义的字符;

1 striptslashes($str);

这个是在输出时去掉转义用的反斜杠(\)
    
    Javascript 中则使用反斜杠(\)对特殊字符转义;
    查询特殊字符无法使用(#, ?, =, &)的原因是因为该类特殊字符属于 html 语言 url
参数传递(Get 方式)时用来进行参数拼接的,直接使用会导致参数传递紊乱,结局方法是:
前台字符串参数传递使用 javascript 的 urlencode 内置函数进行包裹,将字符串参数中的
特殊字符转为相应的 unicode 编码,php 取参时无需进行处理,能够直接显示该 unicode 
所代表的特殊字符。
    
    Php 与 Mysql 中需要特别注意对于反斜杠(\)的转义处理。反斜杠是比较通用的转义
    符号,要匹配字符串中的反斜杠字符(‘\‘),原则上来说只需要使用 2 个反斜杠(\\)
    就可以了,但是 php 与 mysql 中在进行反斜杠匹配时却需要 3 或 4 个反斜杠(\\\\)
    来匹配 1 个字符串中的反斜杠(\)。如为了将字符串中的 1 个反斜杠替换为 4 个反斜
    杠(\\\\)以使 sql 语句能够匹配数据库中的具有 1 个反斜杠(\) 的字段的记录,需要
    使用以下的转换:

  = ("/\\\\/", "\\\\\\\\\\\\\\\\", );
  = ("/‘/", "‘‘", );
  = ("/_/", "‘_", );
  = ("/%/", "‘%", );

这样数据库中的匹配才是合理的。使用之后,为了将 $str 回显,要做相应的逆向处理:

   = ("/\\\\\\\\\\\\\\\\/", "\\\\", );
   = ("/‘‘/", "‘", );
   = ("/‘_/", "_", );
   = ("/‘%/", "%", );
   = ();

这样便满足了特殊字符的查询处理需求。
    sql 中的特殊字符有下划线(_), 百分号(%),和单引号(‘);

1) php (\) 转义符问题

sql 中有特殊含义:表示换行
  需要转为 \\\ (3个) 进行匹配;
  写成三个‘\‘的原因是反斜线符号会被语法分析程序剥离一次,在进行模式匹配时,
  又会被剥离一次,最后会剩下一个反斜线符号接受匹配
  如:
  数据库中有数据如下:

1 "*_.%‘"[email protected]2 "*_.%‘"[email protected]\‘3 "*_.%‘"[email protected]\\4 "*_.%‘"[email protected]\\\5 "*_.%‘"[email protected]\\\\
1     搜索    "*_.%‘"[email protected]       会匹配 "*_.%‘"[email protected];2     搜索    "*_.\%‘"[email protected]      会匹配 "*_.%‘"[email protected];
1     搜索    "*_.%‘"[email protected]\      sql 会报语法错误2     搜索    "*_.\%‘"[email protected]\     sql 会报语法错误
1     搜索    "*_.%‘"[email protected]\\     匹配 0 行   2     搜索    "*_.\%‘"[email protected]\\    匹配 0 行
1     搜索    "*_.%‘"[email protected]\\\%   匹配结果如下:2     "*_.%‘"[email protected]\‘3     "*_.%‘"[email protected]\\                                            4     "*_.%‘"[email protected]\\\                                                5     "*_.%‘"[email protected]\\\\
1     搜索    "*_.%‘"[email protected]\\\\%   匹配结果如下:2     "*_.%‘"[email protected]\‘3     "*_.%‘"[email protected]\\                                       4     "*_.%‘"[email protected]\\\                                                   5     "*_.%‘"[email protected]\\\\
1     搜索    "*_.\%‘"[email protected]\\\\\  匹配 0 行2     搜索    "*_.\%‘"[email protected]\\\\\\ 匹配 0 行3     搜索    "*_.\%‘"[email protected]\\\\\\\ 匹配 1 行4     搜索    "*_.\%‘"[email protected]\\\\\\\\ 匹配 1 行

总结:
      反斜杠做查询时要变 1 个为 4 个,这样总能得到正确的结果。

另:

1 $senameEnter = preg_replace("/\\\/", "\\\\\\\\\\\\\\\\", $senameEnter);

这句代码将 $senameEnter 中的一个反斜杠(\)替换为四个反斜杠(\\\\),以匹配
    sql 中查询一个反斜杠(\)需要用四个反斜杠(\\\\)去匹配。
    为了统一替换的数值可以设为使用四个反斜杠(\\\\)替换一个,如下面代码:

1     $senameEnter = preg_replace("/\\\\/", "\\\\\\\\\\\\\\\\", $senameEnter);

php 正则表达式中反斜杠(\)是用来进行特殊字符转义的,匹配反斜杠原则上只要
    使用两个反斜杠(\\),但是实际使用时却需要三个反斜杠(\\\)进行匹配。php 字符
    串中需要由四个反斜杠(\\\\)来表示一个反斜杠的替代。详细的原因比较复杂,需要    
    根据程序设计的内部机制进行解释。

2) & 符号问题
    
    & 符号的问题原因是:在url传递参数时这个符号代表了传递字符的连接符。
    同样存在问题的还有等号(=)和问号(?)。
    解决方法:
        js 拼凑URL时先对这三个符号进行处理,传递之后再进行逆向处理。
    如果编码是将其编码为相应的unicode码,后台无需在特别处理。

1 url = url.replace(/\?/g,"%3F").replace(/&/g,"%26").replace(/=/g,"%3D");

使用 jquery 取出来的字符串如果包含 ‘&‘ 符号,javascript 会将其妆化为相应的等式实体 &
    回显需要进行特别处理(无内置函数):

1 sename = $(obj).html().replace(/&/g, ‘&‘);
时间: 2024-10-24 05:31:02

php, html, javascript, mysql 之间的特殊字符处理的相关文章

Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle

Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq  index2 3. 检查约束 (Check Counstraint) 对该列数据的范围.格式的限制(如:年龄.性别等)2 4. 默认约束 (Default Counstraint) 该数据的默认值2 5. trigger2 6. 外键机制  参照完整性:2 7. 断言约束:不必与特定的列绑定,可以理解为能应用于多个表的

DataX实现HDFS与MySQL之间数据同步

本案例仅适用于HDFS与MySQL之间的数据同步实现. 1.  在编译安装之前注意将release下面的setSharePath方法中的路径改为你自己的安装路径,笔者的为/home/woody/datax/libs. 2.  rpm打包之前,要修改*.spec文件中的路径,dataxpath,此外可能还需要注解掉部分赋值文件的代码,如cp  –r ${OLDPWD}****.properties ****.conf,在engine.spec中的jar包复制语句也要注解掉. 3.  注意将hdfs

JavaScript中字符串去掉特殊字符和转义字符

最近游戏的基本功能都已经开发完成了,再弄登录注册这一块时,用户名需要去掉字符串中的特殊字符和转义字符,代码如下: <pre name="code" class="javascript">/*** * 去掉字符串中的特殊字符 */ var excludeSpecial = function(s) { // 去掉转义字符 s = s.replace(/[\'\"\\\/\b\f\n\r\t]/g, ''); // 去掉特殊字符 s = s.repl

Ajax PHP JavaScript MySQL实现简易的无刷新在线聊天室

思路 消息显示区 发消息 板块 消息显示 消息发送 优化 显示非重复性的数据 优化显示 加上滚动条 每次都显示最新消息 完整代码 前端代码 数据库表结构 服务器端代码 总结与展望 总结 展望 为更好的运用这两天学到的Ajax的相关的知识,就做了个简单的在线网络聊天室. 思路 实现聊天室,基本上就是通过Ajax来传递数据,让PHP来实现对数据的差入和查找,再交给前端JavaScript实现页面的更新,达到即时聊天的功能. 消息显示区 消息显示区就是一个DIV块,我们会借助Ajax获取到服务器端信息

php与mysql之间操作原理

php和mysql相关扩展有:mysql.mysqli和pdo三种 mysql扩展从php5.5.0被废弃,并且从从php7.0.0开始被废除 mysql之前的使用---几个基本的函数:mysql_connect();mysql_close();mysql_create_db();mysql_db_query();mysql_drop_db(); 从web查询数据库: 一个用户的浏览器发出一个http请求,请求特定的web页面,在该页面中触发表单,提交到php(如:results.php)内部处

oracle 和mysql之间的数据类型对比

编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型:MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样 2 Varchar2(n) varchar(n) 3 Date DATATIME 日期字段的处理MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时

封装:PDO与MySQL之间的无缝切换

以下的例子是将MySQL和PDO封装好,再无缝切换: 文件目录: config.php文件:   <?php return array( // 数据库配置 'DB' => array( 'default_extension'=>'mysql', //这里可以是pdo或mysql ), // 分页配置 // 上传配置 // 图像处理配置 ); I_DB.interface.php文件: <?php /** * 数据库接口 */ interface I_DB { public stat

php与Mysql之间的关系以及一些简单的操作

先贴代码 <html> <head> <title>数据库相关</title> </head> <body> <?php $con = mysql_connect("localhost","root","root"); //链接数据库 if(!$con){ die('连接失败!' . mysql_error()); //判断是否成功 } /* if(mysql_quer

mysql模糊查询特殊字符(\,%和_)处理

/** * sql模糊查询特殊字符(\,%和_)处理 * * @param string $str * @return string */ public static function like_search_specialchars($str){ return str_replace(array('\\', '%', '_'), array('\\\\', '\\%', '\\_'), $str); }