Как правильно экранировать этот аргумент в 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>';

В чем заключается ошибка, которую вы видите?

 1
Author: EternalHour, 2014-08-03 20:04:23

Исправлено 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, \',\') 

Привело к таким ошибкам, как Неперехваченная синтаксическая ошибка: Неожиданный НЕЗАКОННЫЙ токен

 1
Author: The One and Only ChemistryBlob, 2014-08-03 20:30:35