Faz javascript charset específico vigor?

votos
5

Eu estou tentando usar javascript, sem estrutura (protótipo, jQuery, etc), para inserir dados passados ​​a partir de um formulário HTML para um banco de dados mysql. Eu consegui começar este trabalho, mas, obter um problema com alguns caracteres especiais comumente usados ​​em minha língua (æøå). utf-8 suporta esses personagens, e tudo funciona bem quando eu pular o javascript. No entanto, quando eu tento passar o conteúdo do formulário HTML através de javascript função post e executar a consulta com o meu script php de trabalho, cada æøå é convertido em Ã|øà ¥.

Para quebrá-lo para baixo, não javascript de alguma forma forçar um charset específico quando nenhum outro é determinado no código? Tentei especificar charset no cabeçalho do post javascript eo arquivo php, bem como o formulário HTML.

Eu acredito que deve haver algo errado ou faltando no meu arquivo javascript, formpost.js:

    function sendText(visbool){
  var http =new GetXmlHttpObject();
  var url = sendtext.php;
  var ovrskrift = document.form1.overskrift.value;
  var cont = document.form1.content.value;

  var params = overskrift= + ovrskrift + &tekst= + cont + &visbool= + visbool;
  http.open(POST, url, true);

  //Send the proper header information along with the request
  http.setRequestHeader(Content-type, application/x-www-form-urlencoded);
  http.setRequestHeader(Content-length, params.length);
  http.setRequestHeader(Connection, close);

  http.onreadystatechange = function() {//Call a function when the state changes.
    if(http.readyState == 4 && http.status == 200) {
        // gjør noe smart her
    }
  }
  http.send(params);
}


function GetXmlHttpObject()
 { 
 var objXMLHttp=null;
 if (window.XMLHttpRequest)
  {
  objXMLHttp=new XMLHttpRequest();
  }
 else if (window.ActiveXObject)
  {
  objXMLHttp=new ActiveXObject(Microsoft.XMLHTTP);
  }
 return objXMLHttp;
 }

sendtext.php:

<?php
//variabler for spørring
$date= date('Y-m-d');
$overskrift= $_POST[overskrift];
$ostr='36';
$tekst= $_POST[content];
//$tekst=test tekst;
$istr='32';
$bilde=;
$style=onlyinfo.css;
//$vis=$_POST['visbool'];
$vis=0;

require ('../config.php'); // henter informasjon om database tilkoblingen fra config.php

if (!$con){die('Could not connect: ' . mysql_error());} // lager feilmelding hvis tilkoblingen mislyktes

// spørring for databasen, konstrueres etter variablene som er angitt ovenfor
$sql=INSERT IGNORE  INTO tbl_info(dato,overskrift_tekst,overskrift_str,infotekst_tekst,infotekst_str,bilde,style,vismeg) VALUES(' . $date . ',' . $overskrift . ',' . $ostr . ',' . $tekst . ',' . $istr . ',' . $bilde . ',' . $style . ',' . $vis . ');
$result = mysql_query($sql); // kjører spørring og lagrer resultat i $result

mysql_close($con); // lukker database tilkoblingen
?>

createslide.php: (extensão .php reservado para implementação de código futuro)

<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd>
<html xmlns=http://www.w3.org/1999/xhtml dir=ltr>
<head>
<title>inforMe: Legg til side</title>
<link type=text/css rel=stylesheet href=./css/style.css id=adminss>  
<script src=./js/formpost.js></script>
<script type=text/javascript src=./tinymce/jscripts/tiny_mce/tiny_mce.js></script>
<script type=text/javascript>
tinyMCE.init({
    mode : textareas
});
</script>

</head>
<body>
<div class=imgupload>
  <input type=button value=Last opp bilde> <img src= />
</div>
<div class=form>
  <form name=form1 method=post action=sendtext.php>
    <label for=overskrift>Overskrift:</label>
    <input type=text size=70 id=overskift name=overskrift><br />
    <label for=content>Tekst:</label>
    <textarea id=content name=content cols=50 rows=15>This is some content that will be editable with TinyMCE.</textarea>
    <input type=button value=save draft onclick=sendText(0)/>
    <input type=button value=save and publish onclick=sendText(1)/>
    <input type=submit value=regular submit button/>
  </form>
</div>

</body>
</html>

NB! Eu realmente não sei onde colocar essas informações para .. bem .. eu decidi ir com ele aqui: Primeiro de tudo obrigado por todas as boas sugestões abaixo. Eu acredito a pergunta foram respondidas. Como para o meu problema, é apenas parcialmente resolvido.

Parece que a utf-8 charset está perdido em algum lugar ao longo da linha aqui, se eu criar um novo banco de dados mysql com Latin-1 charset e alterar as opções charset em meus arquivos para iso-8859-1 ele funciona exatamente correto. Desde a minha configuração de teste é baseado em todos os softwares norueguês (navegadores, servidor db, etc), acho que onde quer que não é especificado caso contrário ele irá retornar iso-8859-1

NBB! E agora está tudo bem novamente. tudo funciona bem quando eu adiciono:

header ( 'Content-Type: text / plain; charset = utf-8');

ao topo do meu arquivo sendtext.php.

Publicado 28/05/2009 em 10:15
fonte usuário
Em outras línguas...                            


7 respostas

votos
7

Tente adicionar o charset do cabeçalho do tipo de conteúdo como este:

"application/x-www-form-urlencoded; charset=utf-8;"

Além disso, no seu documento deve especificar é utf-8 no cabeçalho:

<META http-equiv="Content-Type" content="text/html; charset=utf-8" />

Você provavelmente deve também fazer encodeURI (valor) em todos os seus valores, de modo que está devidamente URL codificado.

Respondeu 28/05/2009 em 10:36
fonte usuário

votos
3

Internamente, JavaScript usa Unicode, para que ele possa armazenar seus tremas sem problema. Nota: Unicode = UTF-8.

Mas, em seguida, tentar enviar o texto para o servidor e aqui, o problema começa. O fio (Internet) entre o navegador eo servidor não suporta Unicode, para que o navegador tem para codificar os dados. Então, ele converte o Unicode para um fluxo de bytes UTF-8.

No lado do servidor, você deve converter os dados para Unicode.

Respondeu 28/05/2009 em 10:37
fonte usuário

votos
2

Sei que esta questão já foi publicado há dois anos, mas a razão a resposta de PQW funciona é que o cliente (browser) deve responder usando o mesmo conjunto de caracteres que a página foi servido com (especificando assim UTF-8 em uma meta-tag funciona). Usando JavaScript não alterar esse pressuposto básico (então a resposta seria correto se Javascript estava envolvido ou não).

O "método mais correto" é para especificar o conjunto de caracteres no cabeçalho de resposta do servidor, mas porque isso nem sempre é possível (talvez você não tem nenhum controle sobre eles ou uma série de outras razões), o META-abordagem é a próxima melhor maneira de conseguir isso.

Respondeu 14/10/2011 em 18:26
fonte usuário

votos
1

Dois não testados (em relação à sua amostra de código) sugestões:

(1) Referência seus JS externos com atributo charset:

<script src="file.js" type="text/javascript" charset="utf-8"></script>

(2) Talvez algo mais pode ser feito no lado do PHP, como caracteres não-UTF8 tira ?:

<?php
$result = iconv("UTF-8","UTF-8//IGNORE", $result);
?>
Respondeu 28/05/2009 em 13:46
fonte usuário

votos
1

Eu acho que você pode tentar usar encodeURIComponent.

var ovrskrift = encodeURIComponent(document.form1.overskrift.value);

Você deve usar isso em vez de escape. Leia mais sobre esta página: fuga Comparando (), encodeURI () e encodeURIComponent () .

Ele afirma:

[...] você deve evitar o uso de escape () sempre que possível. A melhor alternativa é geralmente encodeURIComponent (). [...]

... e que parece ser correto em minhas experiências também.

Respondeu 28/05/2009 em 13:32
fonte usuário

votos
1

Ele não força um, mas, dependendo do conjunto de caracteres do HTML lê-lo em, tanto do conjunto de exibição charset nos metadados ea forma como o formato de arquivo é salvo, ele faz de tudo engraçado ...

Então, quando você salvar o HTML eo Javascript, salvar tanto como UTF-8.

Além disso, em PHP que você pode precisar de alguma ação mb_internal_encoding ...

Respondeu 28/05/2009 em 10:38
fonte usuário

votos
0

Javascript não 'força' uma página de código como esse. Para obter o resultado que você quer apenas usar escape () e unescape () para passar o ASCII estendido.

F.

Respondeu 28/05/2009 em 10:55
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more