我的网站有一些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, ",")
答案 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
之类的错误