Eu tenho preocupações sobre o uso seguro da função str_replace
. POR EXEMPLO.
$var = "abcdeefghij";
$var = str_replace("ee", "", $var); // Should be "abcdfghij"
É possível ignorar (get "abcdeefghij" - com 2 "e" letras) isso por charset multibyte ou caractere nulo por exemplo?
EDITAR: Eu estava pensando em algo assim: abcd% 6565fghij% 6565 seria substituído por ee mas str_replace
não funcionaria porque é uma string multibyte (mb_str_replace
).
Respostas:
2 para resposta № 1De fato, se ee
não ocorre na string exatamente dessa maneira, o que significa que, em uma codificação compatível e sem caracteres invisíveis adicionais, ela não "corresponde". No que diz respeito às codificações compatíveis, ee
em seu código-fonte é provável ASCII, então qualquer ASCIIcodificação compatível fará (incl. Latin-1, utf-8 e a maioria das codificações de byte único). Se houver outros caracteres / bytes no meio, obviamente não é a mesma string e não irá corresponder. Outros personagens parecidos obviamente não serão compatíveis.
3 para resposta № 2
¿Sıɥʇ ǝʞı ן uɐǝɯ no⅄
sim, pode ser possível "injetar" um caractere "e" inserindo um caractere Unicode que parece gostar e
mas é diferente. Esse perigo está sempre lá, qualquer um que você nunca poderá detectar qualquer personagem que se assemelha "e".
É impossível dizer se isso é um problema real, embora sem saber o que você está tentando fazer. Normalmente, isso não deve ser relevante para a segurança. Talvez fornecer um pouco mais de fundo?