← PHP

Ajuda com php

Lida 5207 vezes

Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

Boa noite, estou com um problema num script php que estou a tentar adaptar, o meu problema está em que o texto escrito com acentos num campo não é idendificado e dá-me erro.
Consiste no seguinte, ao escrever algo com caracteres latinos (ã,ç,õ,...) no campo chamado "item description" retorna com o erro de que o campo não pode ficar vazio.
Estive a verificar o ficheiro php e encontrei a linha:

Código: [Seleccione]
$item_details['description'] = $db->rem_special_chars((($_POST['description_main']) ? $_POST['description_main'] : $item_details['description']));

Penso que o que me está a provocar isto é o "rem_special_chars" mas não sei como resolver, alguém pode dar uma dica de como proceder para resolver isto?

Agradeço desde já.
Offline

Bruno Gaspar 
Membro
Mensagens 242 Gostos 1
Feedback +3

Troféus totais: 18
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Ja tentaste remover o rem_special_chars ?
Código: [Seleccione]
$item_details['description'] = ($_POST['description_main'] ? $_POST['description_main'] : $item_details['description']);
E essa linha pode ser encurtada, ficaria do tipo
Código: [Seleccione]
$item_details['description'] = $db->rem_special_chars($_POST['description_main'] ?: $item_details['description']);
Tenta colocar também
Código: [Seleccione]
header('Content-Type: text/html; charset=utf-8', true);no topo desse ficheiro para ver se ajuda
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

Obrigado pela resposta, já testei remover mas continua o problema, não sei a que se deve.
Também já tinha testado com o código:
Código: [Seleccione]
header('Content-Type: text/html; charset=utf-8', true);
Mas não resolveu.
Não estou a ver outro código que efectue a função.
Offline

Rogério Moreira 
Editor
Mensagens 1313 Gostos 11
Feedback +15

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Confirma se tens em UTF-8
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

está em utf-8, mas tem a porra do filtro que me está a causar o problema no campo de texto.
Na apresentação da página aparecem acentos, ao escrever o texto no campo de texto também aparecem, mas a enviar dá erro de campo vazio, como se não escreve-se nada, mesmo que seja um texto de 20 palavras e apenas 1 tenha acentos ou um "ç" que não assume nenhum texto. Se escrevo sem acentos assume bem o texto e não dá erros...
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

Este script possui um ficheiro de linguagem, alterei nesse ficheiro a linha que diz:

define ('LANG_CODEPAGE', 'ISO-8859-1');

para:

define ('LANG_CODEPAGE', 'utf-8');

e desta forma já não me dá o erro no campo de texto, mas o resto do site aparece sem acentos e substitui os caracteres latinos por simbolos destes: ��

Já testei colocar a linha de código:
Código: [Seleccione]
header('Content-Type: text/html; charset=utf-8', true);
no topo dos ficheiros mas não muda nada.

Alguma ideia de como resolver isto?
 
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

Actualmente consegui que o site apresente os caracteres normais usando no hearder o código:
Código: [Seleccione]
header('Content-Type: text/html; charset=utf-8', true); e o formulário já não devolve o erro porque troquei o charset do ficheiro de linguagem para UFT-8, assim mesmo escrevendo os caracteres ç,ã.é aceita o texto, mas tenho outro problema, o texto é aceite mas é exibido com caracteres estranhos no lugar destas letras.

Alguém me pode explicar como fazer o formulário de envio de texto enviar os caracteres correctamente?

O charset ISO-8859-1 não me permite o envio no formulário, existe alguma linha de código para lhe inserir para que aceite os caracteres e os mostre devidamente?
Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

O charset ISO-8859-1 não me permite o envio no formulário, existe alguma linha de código para lhe inserir para que aceite os caracteres e os mostre devidamente?

Não sendo a solução, para este ponto em particular, também tens o atributo accept-charset que podes experimentar.

Exemplo:
Código: [Seleccione]
<form action="" accept-charset="ISO-8859-1">

</form>

Quanto à verdadeira origem da situação que descreves, o problema pode vir de qualquer lado e não de onde julgas que vem, por isso é difícil ficar a adivinhar sem ver o código. Com o código à frente, basta escavar mais para descobrir.
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

Tenho andado em volta disto e estou a pensar que o problema é do tiny_mce acho que é defeito nele, alguém sabe uma forma de fazer o tiny_mce aceitar caracteres portugueses e que os coloque na base de dados correctamente?
Offline

bonsempregos 
Membro
Mensagens 2010 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Já tentaste ver as funcoes que fazem a validação do form?
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

Estou a ver que é demasiado confuso para mim.
Se uso ISO-8859-1 não me aceita o texto e dá o erro de que o campo não pode ficar vazio, se removo a linha "$field_value = $this->add_special_chars($field_value);" já não dá o erro mas passa para a página seguinte e não escreve nada na base de dados.
Se uso charset= utf-8 aceita o texto mas guarda-o e exibe-o com simbolos a substituir os caracteres tipicos portugueses por exemplo, Descrição exibe Descrição, vilaça exibe vilaça, e tudo assim.

Já tentaste ver as funcoes que fazem a validação do form?

Acho que o o problema é mesmo o tiny_mce porque no mesmo formulário tem um campo de texto normal que é o título e outro que é a descrição usa tiny_mce para escrita com possibilidade de html. No campo de texto normal ao retirar a linha que verifica se possui caracteres especiais, o texto é aceite e bem enviado para a base de dados, é perfeitamente exibido no site posteriormente. Já com o texto inserido no tiny_mce não se passa o mesmo, acho que é o tiny_mce que está a substituir os caracteres que são inseridos e a gravar mal na base de dados.
Alguém sabe como resolver isto?
Offline

ricardomoreira 
Membro
Mensagens 69 Gostos 0
Troféus totais: 19
Trófeus: (Ver todos)
Windows User Apple User Super Combination Combination Topic Starter Level 3 Level 2 Level 1 50 Posts 10 Posts

E o default charset da DB, com que valor está?
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

Estava inicialmente com latin1 mas mudei para utf-8 e é igual.
Penso que não deve ser disso porque o campo de texto título também é escrito na base de dados e esse escreve bem, o campo de texto que usa tiny_mce para editar o texto é que funciona mal. O texto do campo titulo guarda normal mesmo em ISO-8859-1 depois é chamado da base de dados e é mostrado bem, mas o mesmo não acontece com o texto do campo descrição que usa o tiny_mce.
Dará para adicionar entities ao tiny_mce para resolver o problema destes caracteres?
Offline

kurtmix 
Membro
Mensagens 1889 Gostos 588
Feedback +4

Troféus totais: 23
Trófeus: (Ver todos)
Level 5 Windows User Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 1000 Posts

alguém me sabe dizer o que faz esta parte de código php?

Código: [Seleccione]
function normalize($string) {
   global $db;
   
    $ext = array(192, 193, 194, 195, 196, 197, 224, 225, 226, 227, 228, 229, 199, 231, 200, 201, 202, 203, 232,
        233, 234, 235, 204, 205, 206, 207, 236, 237, 238, 239, 210, 211, 212, 213, 214, 216, 242, 243, 244, 245,
        246, 248, 209, 241, 217, 218, 219, 220, 249, 250, 251, 252, 221, 255, 253);

    $norm = array(65, 65, 65, 65, 65, 65, 97, 97, 97, 97, 97, 97, 67, 99, 69, 69, 69, 69, 101, 101, 101, 101, 73,
        73, 73, 73, 105, 105, 105, 105, 79, 79, 79, 79, 79, 79, 111, 111, 111, 111, 111, 111, 78, 110, 85, 85,
        85, 85, 117, 117, 117, 117, 89, 121, 121);

    $string = $db->add_special_chars($string);
    $string = utf8ToUnicode($string);
    // Using array insersect is slower
    if (is_array($string))
    {
       foreach ($ext as $k => $e) {
           if ($pos = array_search($e, $string)) {
               $string[$pos] = $norm[$k];
           }
       }
       $string = unicodeToUtf8($string);
    }
    return $string;
}



function post_slug($str)
{
   return strtolower(preg_replace(array('/[^a-zA-Z0-9_ -]/', '/[ -]+/', '/^-|-$/'),
      array('', '-', ''), $str));
}

function sanitize_var($value)
{
if (!is_numeric($value))
{
$value = post_slug($value);

$value = str_replace('amp','and',$value);
$value = str_replace('quot','',$value);
$value = str_replace('039','',$value);
$value = str_replace(' ','-',$value);
}

return $value;
}
Offline

bonsempregos 
Membro
Mensagens 2010 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

o caractéres especiais não tem nada a ver com os caracteres latinos, para saberes mais sobre os especiais: http://php.net/manual/en/function.htmlspecialchars.php

O ideal é partilhares o código, pois ninguem se vai dar ao de trabalho de andar a adivinhar... Se já o tivesses feito não tinhas perdido  4 dias de volta disso como perdeste até agora :)