php js相关路径bug解决

本文介绍了解决路径中包含双引号、单引号等特殊字符导致数据库写入及读取失败的方法。通过使用 addslashes 和 htmlspecialchars 函数进行转义处理,确保数据能正确存取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在添加路径功能中发现bug,路径中有双引号、单引号会出现写入数据库失败,从数据库中读取失败等问题,例如 http://write.“blog”.youkuaiyun.com/postedit中 添加双引号和单引号会出现双引号为空白的情况。上例子输入后,从数据库中读取出来则显示为http://write.  后边的内容都没了,经过查找资料得以解决:

步骤1:在写入数据库之前用函数进行添加转义符号:

addslashes()函数 可以对(单引号),”(双引号),\(反斜线)和 NULL 字符转义,函数说是可以自动为以上四种符号进行转义,但是我实验测试只能对单引号 和\(反斜线)进行转义。

2.从数据库中读取出来的时候再用另外一种方法对双引号进行转义:

我使用的是htmlspecialchars() 函数,htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体,具体使用方法见下边。


3.碰到的问题有单引号的路径无法写入数据库,利用replace()函数对路径中存在的单引号进行替换:

cmd.replace(/\'/ig, "\\\'");  解释replace(/原样/,“替换成的字符”) \'表示单引号,\\\‘表示(\')将\也转义了一下。  





PHP addslashes() 函数

定义和用法

addslashes() 函数在指定的预定义字符前添加反斜杠。

这些预定义字符是:

  • 单引号 (')
  • 双引号 (")
  • 反斜杠 (\)
  • NULL

语法

addslashes(string)
参数 描述
string 必需。规定要检查的字符串。

提示和注释

提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备合适的字符串。

注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

例子

在本例中,我们要向字符串中的预定义字符添加反斜杠:

<?php
$str = "Who's John Adams?";
echo $str . " This is not safe in a database query.<br />";
echo addslashes($str) . " This is safe in a database query.";
?>

输出:

Who's John Adams? This is not safe in a database query.
Who\'s John Adams? This is safe in a database query.


mysql语句中有引号的问题解决方案

在mysql的查询、修改、插入、删除的sql语句里有引号如何处理?

例如:

1
2
3
4
5
6
7
8
<?
$name  "my name is xcxc" ;
 
$people  "i'm chinese people" ;
 
$sql  "update table set field1='$name', field2='$people'" ;
 
?>

 

其实有很多方法可以解决,比如strtr、str_replace等字符串替换函数,将单引号(')和双引号(")替换成转移单引号(\')和转移双引号(\"),还可以使用addslashes函数将指定的预定义字符前添加反斜杠。

下面看看我的办法

我使用的是htmlspecialchars() 函数,htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

 预定义的字符有:

  • & (和号) 成为 &amp;
  • " (双引号) 成为 &quot;
  • ' (单引号) 成为 &#039;
  • < (小于) 成为 &lt;
  • > (大于) 成为 &gt;

语法:htmlspecialchars(string,quotestyle,character-set)

语法说明:

参数 描述
string 必需。规定要转换的字符串。
quotestyle

可选。规定如何编码单引号和双引号。

 ENT_COMPAT - 默认。仅编码双引号。

ENT_QUOTES - 编码双引号和单引号。

ENT_NOQUOTES - 不编码任何引号。

character-set

可选。字符串值,规定要使用的字符集。

ISO-8859-1 - 默认。西欧。
ISO-8859-15 - 西欧(增加 Euro 符号以及法语、芬兰语字母)。
UTF-8 - ASCII 兼容多字节 8 比特 Unicode
cp866 - DOS 专用 Cyrillic 字符集
cp1251 - Windows 专用 Cyrillic 字符集
cp1252 - Windows 专用西欧字符集
KOI8-R - 俄语
GB2312 - 简体中文,国家标准字符集
BIG5 - 繁体中文
BIG5-HKSCS - Big5 香港扩展
Shift_JIS - 日语
EUC-JP - 日语

语法举例:

1
2
3
4
<?php
$str  "i'm a chinese" ;
$str2  = htmlspecialchars( $str ,ENT_QUOTES);
?>

例子

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<body>
<?php
$str  "John & 'Adams'" ;
echo  htmlspecialchars( $str , ENT_COMPAT);
echo  "<br />" ;
echo  htmlspecialchars( $str , ENT_QUOTES);
echo  "<br />" ;
echo  htmlspecialchars( $str , ENT_NOQUOTES);
?>
</body>
</html>

 浏览器输出:

1
2
3
John &  'Adams'
John &  'Adams'
John &  'Adams'

 如果在浏览器中查看源代码,会看到这些 HTML:

1
2
3
4
5
6
7
< html >
< body >
John & 'Adams'< br  />
John & 'Adams'< br  />
John & 'Adams'
</ body >
</ html >

 

分类:  MYSQLPHP
0
0
(请您对文章做出评价)
« 上一篇: mysql维护常用命令
» 下一篇: 让dede运行php代码和mysql语句
posted @  2014-01-27 10:32  神马和浮云 阅读( 802) 评论( 0编辑  收藏



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值