Как правильно экранировать этот аргумент в PHP?
На моем сайте есть некоторый контент, сгенерированный 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 или о взрыве пользовательского ввода на ",", а затем обрезать каждый элемент массива разнесения. В качестве альтернативы я мог бы использовать Javascript для разделения на ",", а затем обрезать части в цикле for (или что-то подобное).
Может ли кто-нибудь сказать мне, как правильно избежать следующего аргумента в моем эхо-вызове функции?
this.value.trim().replace(/,\s|\s,/g, ",")
2 answers
Я склонен повторять свой вывод в противоположность тому, как вы это сделали, что, как мне кажется, легче контролировать. Одинарные кавычки снаружи и двойные кавычки внутри.
echo '<div class="myClass1 myClass2">
<input type="text" name="myInput" value="'.$TagString.'" onmouseout="ajaxFunction("myString", this.value.trim().replace(/,\s|\s,/g, ""))">
</div>';
В чем заключается ошибка, которую вы видите?
Исправлено it...it казалось, это была ускользающая проблема. Это сработало:
onmouseout='ajaxFunction(\"AStringNotAVariable\", this.value.trim().replace(/,\s|\s,/g, \",\"))'
В то время как
//.replace(/,\s|\s,/g, ",") and .replace(/,\s|\s,/g, ',') and .replace(/,\s|\s,/g, \',\')
Привело к таким ошибкам, как Неперехваченная синтаксическая ошибка: Неожиданный НЕЗАКОННЫЙ токен