javascript - javascript 是否强制使用特定的字符集?

标签 javascript html forms post character-encoding

我正在尝试使用没有框架(原型(prototype)、jQuery 等)的 javascript 来插入从 html 表单传递到 mysql 数据库的数据。我已经设法使它正常工作,但是我的语言 (æøå) 中常用的一些特殊字符出现问题。 utf-8 支持这些字符,当我跳过 javascript 时一切正常。但是,当我尝试通过 javascript post 函数传递 html 表单的内容并使用我的工作 php 脚本执行查询时,每个 æøå 都被转换为 æøå。

要分解它,当代码中没有确定其他字符集时,javascript 是否会以某种方式强制使用特定的字符集?我尝试在 javascript 帖子和 php 文件以及 html 表单的标题中指定字符集。

我相信我的 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;
 }

发送文本.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 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:(为以后的代码实现保留.php扩展名)

<!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>

注意! 我真的不知道把这些信息放在哪里......好吧..我决定在这里使用它: 首先感谢以下所有好的建议。我相信这个问题得到了回答。至于我的问题,只解决了一部分。

似乎 utf-8 字符集在此处的某处丢失了,如果我使用 Latin-1 字符集创建一个新的 mysql 数据库并将我的文件中的字符集选项更改为 iso-8859-1,它就可以正常工作。由于我的测试设置是基于所有挪威软件(浏览器、数据库服务器等),我想只要没有另外指定,它就会返回 iso-8859-1

注意! 现在一切都好了。当我添加时一切正常:

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

到我的 sendtext.php 文件的顶部。

最佳答案

尝试像这样将字符集附加到内容类型 header :

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

此外,在您的文档中,您应该在 header 中指定它是 utf-8:

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

您可能还应该对所有值执行 encodeURI(value),以便对其进行正确的 url 编码。

关于javascript - javascript 是否强制使用特定的字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/919936/

相关文章:

javascript - arguments 变量的一个实例是什么?

javascript - Angularjs 和 Number.NaN

html - CSS 中另一个框后面

php - CakePHP 2.3 表单不显示验证错误

javascript - 方法 Set.prototype.has 调用了不兼容的接收器 undefined

html - 如何对齐我的文本元素?

javascript - 星级评定系统(半星)

php - form_dropdown 值在提交 codeigniter 时未更新

javascript - Angular 警告 "Form submission canceled because the form is not connected"

javascript - 如何在右侧面板中显示子元素?