Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
fiz dois um se nao for ter nenhum get, e outro caso haja get de busca, uso em conjunto com o PHP IDS, no caso eu uso minha classe para tratar todos os post, e somente Get de Busca caso a busca do site for vai get), depois de tratada ele passa pelo phpIDS que se encontrar algo executa um Die e ja era bloqueado, mas caso nao ele prossiga, fiz isso pq as vezes coisas com aspas pode se identificado como XSS aí desse jeito ele converte para códigos html.. e fica sussa. evitando erros desnecessários, coloquei também um array exceção para post de editor de texto.
acabei de fazer o script e não comentei nada ainda, mas depois quando eu comentar eu atualizo ele aki.
<?php
class SecurityCenter
{
public function __construct($SecurityCenter){
foreach ($SecurityCenter as $key=>$value){
$this->SecurityIterate($key,$value);
}
}
private function SecurityIterate($key,$value)
{
$ecept=array();
if (!is_array($value)) {
if (is_string($value)) {
$key=explode(';',$key);
if (!is_array($key)) {
if(!in_array($key,$ecept)){
if(isset($_POST[$key])){
$_POST[$key]= $this->Replace($value);
}
$_REQUEST[$key]= $this->Replace($value);
}
}else{
$Ckey=count($key);
if($Ckey==1){
if(!in_array($key,$ecept)){
if(isset($_POST[$key[0]])){
$_POST[$key[0]]= $this->Replace($value);
}
$_REQUEST[$key[0]]= $this->Replace($value);
}
}elseif($Ckey==2){
if(!in_array($key[1],$ecept)){
if(isset($_POST[$key[0]][$key[1]])){
$_POST[$key[0]][$key[1]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]]= $this->Replace($value);
}
}elseif($Ckey==3){
if(!in_array($key[2],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]])){
$_POST[$key[0]][$key[1]][$key[2]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]]= $this->Replace($value);
}
}elseif($Ckey==4){
if(!in_array($key[3],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]]= $this->Replace($value);
}
}elseif($Ckey==5){
if(!in_array($key[4],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]]= $this->Replace($value);
}
}elseif($Ckey==6){
if(!in_array($key[5],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]]= $this->Replace($value);
}
}elseif($Ckey==7){
if(!in_array($key[6],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]]= $this->Replace($value);
}
}elseif($Ckey==8){
if(!in_array($key[7],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]]= $this->Replace($value);
}
}elseif($Ckey==9){
if(!in_array($key[8],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]]= $this->Replace($value);
}
}elseif($Ckey==10){
if(!in_array($key[9],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]]= $this->Replace($value);
}
}
}
}
} else {
foreach ($value as $subKey => $subValue) {
$this->SecurityIterate($key . ';' . $subKey, $subValue);
}
}
}
private function Replace($Replace)
{
//ENT_QUOTES
$Replace = htmlentities($Replace, ENT_COMPAT | ENT_IGNORE, "UTF-8");
$Replace = str_replace("'",'’',$Replace);
$aprovado = strip_tags(trim($Replace));
return $aprovado;
}
}
if(isset($_REQUEST)){
$SecurityCenter = new SecurityCenter($_REQUEST);
}
?>
<?phppublic function __construct($SecurityCenter){
foreach ($SecurityCenter as $key=>$value){
$this->SecurityIterate($key,$value);
}
}
private function SecurityIterate($key,$value)
{
$ecept=array();
$Busca=array('Search','search','usuario/search');
if (!is_array($value)) {
if (is_string($value)) {
$key=explode(';',$key);
if (!is_array($key)) {
if(!in_array($key,$ecept)){
if(isset($_POST[$key])){
$_POST[$key]= $this->Replace($value);
}elseif(isset($_GET[$key])&& in_array($key,$Busca)){
$_GET[$key]= $this->Replace($value);
}
$_REQUEST[$key]= $this->Replace($value);
}
}else{
$Ckey=count($key);
if($Ckey==1){
if(!in_array($key,$ecept)){
if(isset($_POST[$key[0]])){
$_POST[$key[0]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]])&& in_array($key[0],$Busca)){
$_GET[$key[0]]= $this->Replace($value);
}
$_REQUEST[$key[0]]= $this->Replace($value);
}
}elseif($Ckey==2){
if(!in_array($key[1],$ecept)){
if(isset($_POST[$key[0]][$key[1]])){
$_POST[$key[0]][$key[1]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]])&& in_array($key[1],$Busca)){
$_GET[$key[0]][$key[1]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]]= $this->Replace($value);
}
}elseif($Ckey==3){
if(!in_array($key[2],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]])){
$_POST[$key[0]][$key[1]][$key[2]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]])&& in_array($key[2],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]]= $this->Replace($value);
}
}elseif($Ckey==4){
if(!in_array($key[3],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]][$key[3]])&& in_array($key[3],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]][$key[3]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]]= $this->Replace($value);
}
}elseif($Ckey==5){
if(!in_array($key[4],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]])&& in_array($key[4],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]]= $this->Replace($value);
}
}elseif($Ckey==6){
if(!in_array($key[5],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]])&& in_array($key[5],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]]= $this->Replace($value);
}
}elseif($Ckey==7){
if(!in_array($key[6],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]])&& in_array($key[6],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]]= $this->Replace($value);
}
}elseif($Ckey==8){
if(!in_array($key[7],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]])&& in_array($key[7],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]]= $this->Replace($value);
}
}elseif($Ckey==9){
if(!in_array($key[8],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]])&& in_array($key[8],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]]= $this->Replace($value);
}
}elseif($Ckey==10){
if(!in_array($key[9],$ecept)){
if(isset($_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]])){
$_POST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]]= $this->Replace($value);
}elseif(isset($_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]])&& in_array($key[9],$Busca)){
$_GET[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]]= $this->Replace($value);
}
$_REQUEST[$key[0]][$key[1]][$key[2]][$key[3]][$key[4]][$key[5]][$key[6]][$key[7]][$key[8]][$key[9]]= $this->Replace($value);
}
}
}
}
} else {
foreach ($value as $subKey => $subValue) {
$this->SecurityIterate($key . ';' . $subKey, $subValue);
}
}
}
private function Replace($Replace)
{
//ENT_QUOTES
$Replace = htmlentities($Replace, ENT_COMPAT | ENT_IGNORE, "UTF-8");
$Replace = str_replace("'",'’',$Replace);
$aprovado = strip_tags(trim($Replace));
return $aprovado;
}
}
if(isset($_REQUEST)){
$SecurityCenter = new SecurityCenter($_REQUEST);
}
?>>
Desculpe a sinceridade, mas acredito que você teve muito trabalho, tentando criar uma roda que saiu quadrada. Sua classe poderia ter no mínimo 1/10 do tamanho que possui atualmente.
Tratamentos de matrizes, a grande maioria delas, devem ser feitos com recursividade. Você encadeou ifs.
Não há a necessidade de utilizar replace, uma vez que o php possui a função htmlentities.
acabei de ver e vou usar ele.. mas ele nao resolve o proble dos ifs , os ifis foram para saber se é um pots simples ou de multiplos array.
tipo $_POST[] ou $_POST[][][] tendeu? se souber algo q possa fazer isso mais facil eu agradeço.. agora vou alterar as coisas pelo que você me falou
Pesquise sobre recursividade. Mas lhe darei o exemplo clássico dos clássicos. Um fatorial.
Meu método será, passar um número e retornar o seu fatorial calculado. Farei de duas maneiras, da forma "convencional" e da forma recursiva.
Convencional:
<?php
function fatorialNaoRecursivo($numero) {
$retorno = $numero;
while((--$numero) > 0) {
$retorno *= $numero;
}
return $retorno;
}
Para testar:
echo fatorialNaoRecursivo(4);
saída:
24
Recursivo
<?php
function fatorialRecursivo($numero) {
if($numero > 1){
return $numero * fatorialRecursivo($numero - 1);
}
return 1;
}
Para testar:
echo fatorialRecursivo(4);
saída:
24
A recursividade poderia ser ainda mais compactada utilizando um operador ternário:
function fatorialRecursivo($numero) {
return ($numero > 1) ? $numero * fatorialRecursivo($numero - 1) : 1;
}
Uma das metas da recursividade é evitar linhas de códigos duplicados.
>
Pesquise sobre recursividade. Mas lhe darei o exemplo clássico dos clássicos. Um fatorial.
Meu método será, passar um número e retornar o seu fatorial calculado. Farei de duas maneiras, da forma "convencional" e da forma recursiva.
Convencional:
<?php
function fatorialNaoRecursivo($numero) {
$retorno = $numero;
while((--$numero) > 0) {
$retorno *= $numero;
}
return $retorno;
}
Para testar:
echo fatorialNaoRecursivo(4);
saída:
Recursivo
<?php
function fatorialRecursivo($numero) {
if($numero > 1){
return $numero * fatorialRecursivo($numero - 1);
}
return 1;
}
Para testar:
echo fatorialRecursivo(4);
saída:
A recursividade poderia ser ainda mais compactada utilizando um operador ternário:
function fatorialRecursivo($numero) {
return ($numero > 1) ? $numero * fatorialRecursivo($numero - 1) : 1;
}
Uma das metas da recursividade é evitar linhas de códigos duplicados.
desse jeito q você falou eu sei mas do jeito falei esse nao da certo
$Dados = array(
Nome=>João,
Sobrenome=>Victor,
Telefone=>array(
telUm=>xxx-xxxx-xxxx,
telDois=>yyy-yyyy-yyyy,
telTres=>zzz-zzzz-zzzz
)
)
com base nisso eu posso usar um foreachpara por exemplo alterar o telefone assim:
foreach($dados[Telefone] as $k=>$N){
$_POST[Telefone][$k]=$N;
}
o problema é como fazer para cara array ja aparecer de forma alterar só o local especifico..
imagine que eu tenho $Dados[a][c][d]= alfabeto; como eu faria para alterar sem comprometar a estrutura?
A estrutura não se altera. Mas se você deseja definir regras para a alteração, deve defini-las. No seus atuais exemplo, não há regras. Só vejo IFs encadeados que me saltam aos olhos.
Você nunca poderá fazer algo específico para tudo. São contradições, se é específico, é para alguma coisa exata. Se é para tudo, deixa de ser específico.
Entretanto, nada impede-o de abstrair a base e, assim, implementar o que você atualmente utiliza. Desse modo, você deixa pronto para futuras implementas, sem a necessidade de pensar o que você irá implementar. Isso é Orientação a Objetos.
Antes de tudo, diga quais são as regras, o que você quer fazer, quando e o porquê. Teremos, assim, um começo.
>
A estrutura não se altera. Mas se você deseja definir regras para a alteração, deve defini-las. No seus atuais exemplo, não há regras. Só vejo IFs encadeados que me saltam aos olhos.
Você nunca poderá fazer algo específico para tudo. São contradições, se é específico, é para alguma coisa exata. Se é para tudo, deixa de ser específico.
Entretanto, nada impede-o de abstrair a base e, assim, implementar o que você atualmente utiliza. Desse modo, você deixa pronto para futuras implementas, sem a necessidade de pensar o que você irá implementar. Isso é Orientação a Objetos.
Antes de tudo, diga quais são as regras, o que você quer fazer, quando e o porquê. Teremos, assim, um começo.
você conseguiu entender o que eu queria fazer?
tipo de acordo com o subnivel do array ele fazer a alteração em um post no mesmo subnível.. quando falei em alterar a estrutura é tipo assim. pelo fato de eu colocar tipo $_POST= array(x=array(y=>k)), se o post já tiver outros dados logo eles serão apagados.
eu quis fazer um algoritmo que verifica todos os dados do array e subarrays e altera quando for necessário,
sei q meu algoritimo ficou grande e limitado mas foi a unica forma que encontrei de consiguir fazer isso sem perder todos os dados do array. =S
fiz as alterações que você passou como pode ver no arquivo eu atualizei mas, por mais q tentei não achei solução para melhorar e diminuir a aplicação, se possível gostaria de ver suas alterações nela.
Vou pegar o seu exemplo. Array:
$dados = array(
'Nome' => 'João',
'Sobrenome' => 'Victor',
'Telefone' => array(
'telUm' => 'xxx-xxxx-xxxx',
'telDois' => 'yyy-yyyy-yyyy',
'telTres' => 'zzz-zzzz-zzzz',
'Teste' => 'I\'ll "walk" the <b>dog</b> now'
),
'Teste' => 'I\'ll "walk" the <b>dog</b> now'
);
Somente inseri os valores das chaves Teste para demonstrar melhor o que estará acontecendo.
Eu quero que todos os caracteres sejam convertidos, sem que a estrutura seja modificada e indiferente os níveis do array.
Vamos ao básico, o meu parâmetro, sempre será um array, logo, eu verificarei todas os índices e alterarei com htmlentities:
function verificaArray($array) {
foreach($array AS $key => $var) {
$array[$key] = htmlentities($var , ENT_QUOTES);
}
return $array;
}
Pronto, temos nossa primeira função. Entretanto, essa função possui um problema, ela só funciona corretamente para vetores (array de uma única dimensão). Vamos ao teste:
var_dump(verificarArray($dados));
Saída:
Warning: htmlentities() expects parameter 1 to be string, array given
Então, se houver um array, ocorrerá um erro, pois htmlentities aceita somente strings. Vamos refatorar o código:
function verificarArray($array) {
foreach($array AS $key => $var) {
if(is_string($var)) {
$array[$key] = htmlentities($var , ENT_QUOTES);
}
}
return $array;
}
Agora, somente aceitará valores que são strings. Pois não há necessidade a alterar outros valores como int, float, resource, boolean, etc.
Vamos ao teste:
var_dump(verificarArray($dados));
Saída:
array(4) {
["Nome"]=>
string(18) "João"
["Sobrenome"]=>
string(6) "Victor"
["Telefone"]=>
array(3) {
["telUm"]=>
string(13) "xxx-xxxx-xxxx"
["telDois"]=>
string(13) "yyy-yyyy-yyyy"
["telTres"]=>
string(13) "zzz-zzzz-zzzz"
["Teste"]=>
string(30) "I'll "walk" the <b>dog</b> now"
}
["Teste"]=>
string(57) "I'll "walk" the <b>dog</b> now"
}
Ótimo, já não excluirei mais as outras dimensões do array. Entretanto, ainda não há uma verificação em subníveis, continua apenas em uma dimensão.
Mas pense bem, a função recebe como parâmetro um array e verifica a sua primeira dimensão. A segunda dimensão, não é nada mais que um outro array, dentro do primeiro. Logo, as verificações dentro desse array, são as mesmas que eu fiz no primeiro nível. Nesse caso, eu posso utilizar de recursividade.
Vamos a nossa última refatoração, por hoje é claro, da função:
function verificarArray($array) {
foreach($array AS $key => $var) {
if(is_string($var)) {
$array[$key] = htmlentities($var , ENT_QUOTES);
} else if(is_array($var)) {
$array[$key] = verificarArray($var);
}
}
return $array;
}
Vamos ao teste:
var_dump(verificarArray($dados));
Saída:
["Nome"]=>
string(18) "João"
["Sobrenome"]=>
string(6) "Victor"
["Telefone"]=>
array(4) {
["telUm"]=>
string(13) "xxx-xxxx-xxxx"
["telDois"]=>
string(13) "yyy-yyyy-yyyy"
["telTres"]=>
string(13) "zzz-zzzz-zzzz"
["Teste"]=>
string(57) "I'll "walk" the <b>dog</b> now"
}
["Teste"]=>
string(57) "I'll "walk" the <b>dog</b> now"
Pronto, função concluída. Verificou todos os níveis do nosso array sem modificar sua estrutura.
>
Vou pegar o seu exemplo. Array:
$dados = array(
'Nome' => 'João',
'Sobrenome' => 'Victor',
'Telefone' => array(
'telUm' => 'xxx-xxxx-xxxx',
'telDois' => 'yyy-yyyy-yyyy',
'telTres' => 'zzz-zzzz-zzzz',
'Teste' => 'I\'ll "walk" the <b>dog</b> now'
),
'Teste' => 'I\'ll "walk" the <b>dog</b> now'
);
Somente inseri os valores das chaves Teste para demonstrar melhor o que estará acontecendo.
Eu quero que todos os caracteres sejam convertidos, sem que a estrutura seja modificada e indiferente os níveis do array.
Vamos ao básico, o meu parâmetro, sempre será um array, logo, eu verificarei todas os índices e alterarei com htmlentities:
function verificaArray($array) {
foreach($array AS $key => $var) {
$array[$key] = htmlentities($var , ENT_QUOTES);
}
return $array;
}
Pronto, temos nossa primeira função. Entretanto, essa função possui um problema, ela só funciona corretamente para vetores (array de uma única dimensão). Vamos ao teste:
var_dump(verificarArray($dados));
Saída:
Então, se houver um array, ocorrerá um erro, pois htmlentities aceita somente strings. Vamos refatorar o código:
function verificarArray($array) {
foreach($array AS $key => $var) {
if(is_string($var)) {
$array[$key] = htmlentities($var , ENT_QUOTES);
}
}
return $array;
}
Agora, somente aceitará valores que são strings. Pois não há necessidade a alterar outros valores como int, float, resource, boolean, etc.
Vamos ao teste:
var_dump(verificarArray($dados));
Saída:
array(4) {
["Nome"]=>
string(18) "João"
["Sobrenome"]=>
string(6) "Victor"
["Telefone"]=>
array(3) {
["telUm"]=>
string(13) "xxx-xxxx-xxxx"
["telDois"]=>
string(13) "yyy-yyyy-yyyy"
["telTres"]=>
string(13) "zzz-zzzz-zzzz"
["Teste"]=>
string(30) "I'll "walk" the <b>dog</b> now"
}
["Teste"]=>
string(57) "I'll "walk" the <b>dog</b> now"
}
Ótimo, já não excluirei mais as outras dimensões do array. Entretanto, ainda não há uma verificação em subníveis, continua apenas em uma dimensão.
Mas pense bem, a função recebe como parâmetro um array e verifica a sua primeira dimensão. A segunda dimensão, não é nada mais que um outro array, dentro do primeiro. Logo, as verificações dentro desse array, são as mesmas que eu fiz no primeiro nível. Nesse caso, eu posso utilizar de recursividade.
Vamos a nossa última refatoração, por hoje é claro, da função:
function verificarArray($array) {
foreach($array AS $key => $var) {
if(is_string($var)) {
$array[$key] = htmlentities($var , ENT_QUOTES);
} else if(is_array($var)) {
$array[$key] = verificarArray($var);
}
}
return $array;
}
Vamos ao teste:
var_dump(verificarArray($dados));
Saída:
["Nome"]=>
string(18) "João"
["Sobrenome"]=>
string(6) "Victor"
["Telefone"]=>
array(4) {
["telUm"]=>
string(13) "xxx-xxxx-xxxx"
["telDois"]=>
string(13) "yyy-yyyy-yyyy"
["telTres"]=>
string(13) "zzz-zzzz-zzzz"
["Teste"]=>
string(57) "I'll "walk" the <b>dog</b> now"
}
["Teste"]=>
string(57) "I'll "walk" the <b>dog</b> now"
Pronto, função concluída. Verificou todos os níveis do nosso array sem modificar sua estrutura.
valew.. depois q você falou q tinha jeito eu fui tentando eu quase cheguei nisso mas au ler o que você explicou eu vi q eu estava pensando diferente, tipo eu não inicie a logica da maneira correta. depois q você explicou fez sentido, a forma q você explicou foi perfeita e facil.
valew mesmo.
ficou perfeito.. fiz os teste com o IDS, e o IDS tem uma incompatibilidade mas eu ja arrumei para ficar certo o problema era só aspas simples mesmo em forma de html da algum bug no ids e ele mata a operacao. ficou assim xD
class SecurityCenter
{
public function __construct($POST=NULL,$GET=NULL,$REQUEST=NULL){
if($POST!=''){
$_POST = $this->verificarArray($POST);
}
if($GET!=''){
$_GET['search'] = $this->verificarArray($GET);
}
if($REQUEST!=''){
$_REQUEST = $this->verificarArray($REQUEST);
}
}
private function verificarArray($array) {
foreach($array AS $key => $var) {
if(is_string($var)) {
$array[$key] = $this->Replace($var);
} else if(is_array($var)) {
$array[$key] = $this->verificarArray($var);
}
}
return $array;
}
//Deixei separado pq se no futuro eu quiser aprimorar algo eu faço só nessa parte xD;
private function Replace($string)
{
//ENT_QUOTES
$string = htmlentities($string, ENT_COMPAT | ENT_IGNORE, "UTF-8");
$string = str_replace("'",'’',$string);
$string = strip_tags(trim($string));
return $string;
}
}
if(isset($_REQUEST)){
$get['search']=$_GET['search'];
new SecurityCenter($_POST,$get,$_REQUEST);
}
Desculpe a sinceridade, mas acredito que você teve muito trabalho, tentando criar uma roda que saiu quadrada. Sua classe poderia ter no mínimo 1/10 do tamanho que possui atualmente.
Tratamentos de matrizes, a grande maioria delas, devem ser feitos com recursividade. Você encadeou ifs.
Não há a necessidade de utilizar replace, uma vez que o php possui a função htmlentities.