如何在PHP中正确转义此参数?

时间:2014-08-03 19:49:53

标签: php escaping

我的网站有一些PHP生成的内容,它们回应HTML元素。其中一些元素响应javascript事件...对于一个输入元素,相关事件是onmouseout,但我似乎无法正确地逃避这一点。

$sql = mysqli_query($cxn, "SELECT stuff1, stuff2, stuff100, tags FROM myTable WHERE user_id = 'myID'");

while ($row = mysqli_fetch_assoc($sql)) {
    $Tagstring = $row['tags'];
    //lots of code

    echo "<div class='myClass1 myClass2'>
            <input type='text' name='myInput' value='".$Tagstring."' onmouseout='ajaxFunction(\"myString\", this.value.trim().replace(/,\s|\s,/g, ","))'>
          </div>";
    //more code
}

$ Tagstring是逗号分隔的文本子串字符串。如果用户编辑了他/她的标签,我试图阻止以下情况:

$Tagstring = 'tag1,tag2'; //from database table

//User edits to 'tag1, tag2';

//Pointless ajax call and access of server, since if user input = original $Tagstring, this will return false as I have set up the ajax call, but if user input !== $Tagstring, then ajax function proceeds

我不是PHP和Javascript的新手,因此我在PHP中了解了str_replace或者在&#34;,&#34;上爆发了用户输入。然后修剪爆炸阵列的每个成员。或者,我可以使用Javascript来分割&#34;,&#34;然后在for循环(或类似的东西)中修剪碎片。

有人能告诉我如何在回显的函数调用中正确转义以下参数吗?

this.value.trim().replace(/,\s|\s,/g, ",")

2 个答案:

答案 0 :(得分:1)

我倾向于回应我的输出与您完成它的方式相反,我觉得更容易控制。外部有单引号,内部有双引号。

echo '<div class="myClass1 myClass2">
            <input type="text" name="myInput" value="'.$TagString.'" onmouseout="ajaxFunction("myString", this.value.trim().replace(/,\s|\s,/g, ""))">
     </div>';

您看到的错误是什么?

答案 1 :(得分:1)

修正了......这似乎是一个逃避问题。这很有效:

onmouseout='ajaxFunction(\"AStringNotAVariable\", this.value.trim().replace(/,\s|\s,/g, \",\"))'

,而

//.replace(/,\s|\s,/g, ",") and .replace(/,\s|\s,/g, ',') and .replace(/,\s|\s,/g, \',\') 

导致诸如Uncaught SyntaxError:Unexpected token ILLEGAL

之类的错误