【问题标题】:skipping special character when passing through get request通过获取请求时跳过特殊字符
【发布时间】:2015-05-08 04:59:22
【问题描述】:

这是请求的 js\jquery 函数

function AssignWork(){
    var projectId = $jq(".dmProjName").val(),
        empId = $jq(".nameEmp").val(),
        assignWork = $jq(".workDescription").val(),
        workDate = $jq(".workDate").val();
    var go_path = "Employee_Switch_Person.php?action=assignWork&vars=4&var1="+empId+"&var2="+projectId+"&var3="+assignWork+"&var4="+workDate;
    $jq.get(go_path,{},function(data){
        if(data ==1){
            alert("Successfully Assigned!");
            showAssignWork(0);
        }
    });
}

这是 php

function assignWork($empId,$projectId,$assignWork,$workDate){
    //echo $workDate;
    global $con;
    date_default_timezone_set("Asia/Karachi");
    //echo "date format".date('Y-m-d H:i:s');
    //echo $empId.",".$projectId.",".$assignWork.",".$workDate;
    $sql = "INSERT INTO `tblempassignwork` (`EmpId`, `AssignWork`, `AssignById`, `ProjectId`, `WorkDate`, `AssignDateTime`)
          VALUES($empId,'".$assignWork."',".$_COOKIE["userID"].",".$projectId.",'".$workDate."','".date('Y-m-d H:i:s')."')";
    $result = mysql_query($sql,$con) or die(mysql_error());
    echo $result;
}

问题是

 assignWork = $jq(".workDescription").val()

可以包含带有双引号、单引号、散列或任何特殊字符的字符串。如果我使用单引号或散列,那么它会显示

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法以使用 near 's 并举例说明',3,77,'2015-05-08','2015-05-08 09:51: 17')' 在第 2 行

因为我在字符串中输入了单引号。那么如何在通过获取请求时跳过特殊字符。

【问题讨论】:

    标签: javascript php jquery


    【解决方案1】:

    在 jQuery 中,您可以将所有非字母数字字符替换为-

    assignWork=assignWork.trim().replace(/[^a-z0-9]+/gi, '-');
    

    或者您可以将其替换为空格或最适合您的程序的内容:)

    【讨论】:

    • 当我再次检索这些数据时我会做什么
    • 你可以有一个备份变量说var assignWork_original=assignWork 然后你可以做上面的修剪
    【解决方案2】:

    如果要排除特殊字符

    解决方案已经在stackoverflow中了 javascript regexp remove all special characters

    var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');
    

    【讨论】:

    • 当我再次检索这些数据时我会做什么
    • 一旦您替换了任何字符串的字符,就很难再次检索。您必须将该值存储在某个地方。如果您想要临时值,则存储在会话变量中。
    【解决方案3】:

    改变这个:

    assignWork = $jq(".workDescription").val(),
    

    到这里:

    assignWork = escape($jq(".workDescription").val()),
    

    恕我直言,将未转义的字符串存储在您的数据库中是不安全的,当您在 javascript 中读回它时,您可以“取消转义”它。

    JavaScript unescape() Function

    否则,如果您愿意,只需在 PHP 中使用以下代码对其进行解码:

    $assignWork = urldecode($assignWork);
    

    Javascript's “unescape” in PHP

    【讨论】:

    • 我使用了 escap,但是当我在 WorkDescription 字符串中使用单引号时问题仍然存在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2023-03-13
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多