Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Novamente aqui com um pepinão.
Graças a Deus existe o Fórum iMasters pra colocar a gente novamente na rodovia.
Meu problema é o seguinte: eu desenvolvi um padrãozinho de str_replace() pra converter caracteres especiais, tipo á, é, Á, É... que eventualmente façam parte do field 'descricao' enviados pelo form. Para isso, fiz dois arrays (reduzi muito o código pra deixa apenas onde o problema aparece):
//Array dos caracteres especiais
$special_char = array('á', 'é', 'A', 'É');
//Array das entidades
$html_ent = array('á', 'é', 'Á', 'É');
$string_to_form = mysql_real_escape_string(str_replace($special_char, $html_ent, $_POST['descricao']));
// A palavra 'até' entraria no DB como 'até'
// No view, o str_replace() inverteria isso, mais ou menos como uso sempre no . e , para unidades monetárias.
Aí... quando fiz esse teste, funcionou (mais ou menos, na verdade, com uma ou outra ressalva no uso do mysql_real_escape_string() x str_replace()... mas funfou).
Só que quando foi ajustar para o usar com arrays, if() e for() descambou tudo hehehehe
//Array dos caracteres especiais
$special_char = array('á', 'é', 'A', 'É');
//Array das entidades
$html_ent = array('á', 'é', 'Á', 'É');
// usr == 01 >> ADILSON
if ($usr == '01'){
$usrtbl = 'adilson';
for ($i=1; $i<=21; $i++) {
// Busca a variavel do formulario
$string_to_form_[$i] = mysql_real_escape_string(str_replace($special_char, $html_ent, $_POST['descricao-'.$i]));
// Query
$qry_form = "UPDATE $usrtbl SET
$usrtbl.DESCRICAO='$string_to_form_[$i]'
WHERE $usrtbl.ID='$i'";
mysql_query($qry_form, $con) or die(mysql_error());
}
}
Simplesmente parou de funcionar!!! Tentei jogar os arrays como variáveis $i para dentro do for(), mas não funcionou também. Tentei tirar o mysql_real_escape_string(). Nada. Ele continua gravando Á, é, á, É no banco e não as entidades html como no teste.
Aí dei uma olhada nos posts antigos aqui do fórum e encontrei isso na forma de função. Aí fiz:
function chars_to_ent($str) {
$html_ent = array('Á', 'É');
$special_chars = array('Á', 'É');
return str_replace($special_chars, $html_ent, $str);
}
$string_to_form_[$i] = chars_to_ent($_POST['descricao-'.$i]);
E... nada. Alguém sabe onde estou errando?
Putz.. nem uma visualização ainda hehe =]
Mas no caso eu utilizo a variável $i para limitar o número de loops do for(). Faria $special_char[$i]?
Vou tentar aqui! Valeu Sam!
Tentei com
str_replace($special_char[$i], $html_ent[$i], $_POST['descricao']);
mas não funcionou =(
>
Mas no caso eu utilizo a variável $i para limitar o número de loops do for(). Faria $special_char[$i]?
Vou tentar aqui! Valeu Sam!
Tentei com
str_replace($special_char[$i], $html_ent[$i], $_POST['descricao']);
mas não funcionou =(
Veja se é isto que você quer e adapite ao sua necessidade. Apesar de eu ser novato em PHP consegui excutar aqui e deu certo:
//Caracteres especiais
$special_char = array('á', 'é', 'A', 'É');
//Array das entidades
$html_ent = array('á', 'é', 'Á', 'É');
//Texto a ser trocado
$texto = "José Mário";
//loop até o total de arrays
for ($i=0; $i<count($special_char); $i++) {
//verifica se o caractere existe no texto
$pos = strpos($texto, $special_char[$i]);
//se existir então substitua. a função htmlspecialchars() é para mostrar o $html_ent e não o carcatere acentuado
if ($pos > 0) {
$texto = str_replace($special_char[$i], htmlspecialchars($html_ent[$i]), $texto);
}
}
//mostra o resultado
echo "[".$texto."]";
Então Sam... testei aqui. Funciou na forma como você mandou.
Mas eu não posso usar
$i<count($special_char);
porque cada user possui um número diferente de campos e esses campos são definidos por esse $i < 21.
Além disso, quando começo a trabalhar com variável $i, o processo para de funfar.
Tipo:
$texto_para_db_[$i] = str_replace($special_chars[$i], htmlspecialchars($html_ent[$i]), $_POST['descricao-'.$i]);
Aí já não funciona mais ahhhhhhhhhhh insere o Á no db... e eu queria o Á =P
Então... já tentei das seguintes formas:
$html_ent = array("Á", "á");
$chars = array("Á", "á");
$descricao = str_replace($chars, $html_ent, $_POST['DESCRICAO-'.$i]);
echo $descricao;
Assim:
function chars_to_ent($str) {
$html_ent = array("Á", "á");
$chars = array("Á", "á");
return str_replace($chars, $html_ent, $str);
}
echo chars_to_ent($_POST['DESCRICAO-'.$i]);
E assim:
function chars_to_ent($str) {
$new_str = $str;
$new_str = str_replace('á', 'á', $new_str);
$new_str = str_replace('Á', 'Á', $new_str);
return $new_str;
}
echo chars_to_ent($_POST['DESCRICAO-'.$i]);
Nenhuma das formas funcionou. Não tenho mais nenhuma opção. Alguém me dá uma luz?
>
Então... já tentei das seguintes formas:
$html_ent = array("Á", "á");
$chars = array("Á", "á");
$descricao = str_replace($chars, $html_ent, $_POST['DESCRICAO-'.$i]);
echo $descricao;
Assim:
function chars_to_ent($str) {
$html_ent = array("Á", "á");
$chars = array("Á", "á");
return str_replace($chars, $html_ent, $str);
}
echo chars_to_ent($_POST['DESCRICAO-'.$i]);
E assim:
function chars_to_ent($str) {
$new_str = $str;
$new_str = str_replace('á', 'á', $new_str);
$new_str = str_replace('Á', 'Á', $new_str);
return $new_str;
}
echo chars_to_ent($_POST['DESCRICAO-'.$i]);
Nenhuma das formas funcionou. Não tenho mais nenhuma opção. Alguém me dá uma luz?
Eae cara beleza?
Tenta isso aqui
<?php
/*
ã = ã
á = á
à = à
â = â
ª = ª
ÃÀ = ÁÀ
 = Â
à = Ã
É = É
È = È
Ê = Ê
é = é
è = è
ê = ê
Ó = Ó
Ã’ = Ò
Ô = Ô
Õ = Õ
ó = ó
ò = ò
ô = ô
õ = õ
º = º
Ú = Ú
Ù = Ù
Û = Û
ú = ú
ù = ù
û = û
Ç = Ç
ç = ç
*/
function trata($var) {
// Letra (A) menuscula
$var = str_replace ("ã","a",$var);
$var = str_replace ("á","a",$var);
$var = str_replace ("Ã ","a",$var);
$var = str_replace ("â","a",$var);
$var = str_replace ("ª","a",$var);
// Letra (A) maiuscula
$var = str_replace ("À","a",$var);
$var = str_replace ("Ã","a",$var);
$var = str_replace ("Â","a",$var);
$var = str_replace ("Ã","a",$var);
// Letra (E) menuscula
$var = str_replace ("é","e",$var);
$var = str_replace ("è","e",$var);
$var = str_replace ("ê","e",$var);
// Letra (E) maiuscula
$var = str_replace ("É","E",$var);
$var = str_replace ("È","E",$var);
$var = str_replace ("Ê","E",$var);
// Letra (O) menuscula
$var = str_replace ("ó","o",$var);
$var = str_replace ("ò","o",$var);
$var = str_replace ("ô","o",$var);
$var = str_replace ("õ","o",$var);
$var = str_replace ("º","o",$var);
// Letra (O) maiuscula
$var = str_replace ("Ó","O",$var);
$var = str_replace ("Ã’","O",$var);
$var = str_replace ("Ô","O",$var);
$var = str_replace ("Õ","O",$var);
// Letra (U) menuscula
$var = str_replace ("ú","u",$var);
$var = str_replace ("ù","u",$var);
$var = str_replace ("û","u",$var);
// Letra (U) maiuscula
$var = str_replace ("Ú","U",$var);
$var = str_replace ("Ù","U",$var);
$var = str_replace ("Û","U",$var);
// Letra (Cedilha) menuscula
$var = str_replace ("ç","c",$var);
// Letra (Cedilha) maiuscula
$var = str_replace ("Ç","C",$var);
return $var;
}
?>
Ai substitui essas letras ai que estão em utf-8 pelos acentos!
ou
<?php
function trataTxt($var) {
$var = strtolower($var);
$var = ereg_replace("[áàâãª]","a",$var);
$var = ereg_replace("[éèê]","e",$var);
$var = ereg_replace("[óòôõº]","o",$var);
$var = ereg_replace("[úùû]","u",$var);
$var = str_replace("ç","c",$var);
return $var;
}
echo "Texto com acento:" . "á é í ó ú";
echo "<br>";
echo "Texto sem acento:" . trataTxt("á é í ó ú");
?>
Agora se não funfar por ser envio de E-mail e o texto for dinâmico, cadastre o texto com <meta> iso na sua página! isso resolve pra mim!!!
Espero ter ajudado :thumbsup:
Então... cara estou enloucando.
Tipo... consigo usar o str_replace() de todas aquelas formas executando algo do tipo
function chars_to_ent($str) {
$html_ent = array("Á", "á");
$chars = array("Á", "á");
return str_replace($chars, $html_ent, $str);
}
$texto = "Á á";
echo chars_to_ent($texto);
mas quando uso para converter na forma de uma variável que será enviada ao DB, como abaixo:
function chars_to_ent($str) {
$html_ent = array("Á", "á");
$chars = array("Á", "á");
return str_replace($chars, $html_ent, $str);
}
$texto = chars_to_ent($_POST['texto']);
$valor = str_replace(',', '.', $_POST['valor']);
$q = "UPDATE $tbl SET $tbl.TEXTO='$texto', tbl.VALOR='$valor' WHERE $tbl.ID='1'";
mysql_query($q);
simplesmente não realiza a conversão. Engraçado que se vocês perceberem, eu uso o str_replace dessa forma para trocar a , pelo . e funciona corretamente.
Uma coisa importante é que a declação da função ocorre no início do código, e a requisição do $_POST ocorre dentro de um for() que por sua vez está dentro de um if(). Haveria alguma relação?
Quando você pede pra monstrar Á automaticamente o navegador ou BD interpréta o carctere acentuado Á. Você tem que utilizar função htmlspecialchars() pra o sistema gravar o código e não o caracter.
As funções htmlentities() e/ou htmlspecialchars() não resolve seu problema??
Certo, mas uso o htmlspecialchars() na função, no request do $_POST ou na inserção da variável no sql?
Valeu Sam!
Se você for usar alguma dessas funções, pode descartar qualquer outra formatação para a variável e usar ela somente na hora de mandar pro SQL...
$string_to_form_[$i] = htmlspecialchars($_POST['descricao-'.$i]);
Como se trata de uma array, acredito que tenha que informar o número do array no índice. Lembrando que array começa com o número 0.
str_replace($special_char[0], $html_ent[0], $_POST['descricao']));