PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки.Источник То есть, они есть, были и будут пока есть те кто не защищает входные параметры/данные/и т.д.
function checkBrackets($sData) {
$sRegexp = '#^((?:\((?1)\)|\[(?1)\]|\{(?1)\}|[^()\[\]\{\}]++)*+)$#';
return preg_match($sRegexp, $sData);
}
assert('checkBrackets("(()()([][])[])")==true');
assert('checkBrackets("abc([dy]*[dx]Fz)")==true');
assert('checkBrackets("")==true');
assert('checkBrackets("()[]")==true');
assert('checkBrackets("foo()")==true');
assert('checkBrackets("foo(")==false');
assert('checkBrackets("pqr[Gdz)/(Hdx]")==false');
//test pass
preg_replace('~[^\[\]\(\)\{\}]~', '', $sInput)
<div id="content">
<div data-id="3">...</div>
<div data-id="5">...</div>
...
<div data-id="4">...</div>
</div>
var ids = $('#content [data-id]').map(function () {
return $(this).data('id');
}).toArray();
$.ajax({
...
data: { ids: ids }
})
var str1 = 'как я ', str2 = 'яма';
var concat_with_replace = function(str1, str2) {
var str1_words = str1.split(' '),
str2_words = str2.split(' '),
count = 0, last_word = -1, new_word = -1;
for(var i = 0; i < str2_words.length; i++) {
for(var j = str1_words.length-1; j >= 0; j--) {
if(str1_words[j] === str2_words[i] || str1_words[j] == "" || str2_words[i] === "") {
new_word = j;
break;
}
}
if(new_word !== last_word + 1 && last_word !== -1 || new_word === -1) {
break;
} else {
new_word = -1;
last_word = new_word;
count++;
}
}
var result = str1_words.splice(0 , str1_words.length-count).concat(str2_words);
for(var i = 0 ; i < result.length; i++) {
if(result[i] == "") {
result.splice(i, 1);
i--;
}
}
return result.join(' ');
}
console.log(concat_with_replace(str1, str2));
Если вы собираетесь использовать эту функцию в программе, работающей в качестве демона, убедитесь, что стандартный вывод функции направлен в файл или другой поток, в противном случае PHP зависнет вплоть до конца выполнения программы.