Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript强制特定的字符集吗?_Javascript_Html_Forms_Post_Character Encoding - Fatal编程技术网

javascript强制特定的字符集吗?

javascript强制特定的字符集吗?,javascript,html,forms,post,character-encoding,Javascript,Html,Forms,Post,Character Encoding,我正在尝试使用javascript,不使用框架(prototype、jQuery等),将从html表单传递的数据插入mysql数据库。我已经设法让它工作了,但是,我的语言中常用的一些特殊字符出现了问题(æå)。utf-8支持这些字符,当我跳过javascript时,一切正常。但是,当我试图通过javascript post函数传递html表单的内容并使用我的php脚本执行查询时,每个æå都会转换为Ã阿尔法øà 要分解它,当代码中没有确定其他字符集时,javascript是否以某种方式强制使用特

我正在尝试使用javascript,不使用框架(prototype、jQuery等),将从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;
 }
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 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
?>

信息:从腿到边
tinyMCE.init({
模式:“文本区域”
});
过度克里夫特:

特克斯特: 这是一些可以用TinyMCE编辑的内容。
NB 我真的不知道该把这些信息放在哪里,所以。。好。。我决定在这里继续: 首先,感谢下面所有的好建议。我相信这个问题已经回答了。至于我的问题,只解决了一部分

看起来utf-8字符集在这里的某个地方丢失了,如果我使用拉丁字符集创建一个新的mysql数据库,并将我文件中的字符集选项更改为iso-8859-1,它将完全正常工作。由于我的测试设置是基于所有挪威软件(浏览器、db服务器等),我想如果没有另外指定,它将返回iso-8859-1

NBB 现在一切又好起来了。当我添加以下内容时,一切正常:

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


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

尝试将字符集附加到内容类型头,如下所示:

"application/x-www-form-urlencoded; charset=utf-8;"
此外,在您的文档中,您应该在标题中指定它是utf-8:

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


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

在内部,JavaScript使用Unicode,因此它可以毫无问题地存储UMLAUT。注意:Unicode!=UTF-8

但是,当您尝试将该文本发送到服务器时,问题就出现了。浏览器和服务器之间的连接(Internet)不支持Unicode,因此浏览器必须对数据进行编码。因此,它将Unicode转换为UTF-8字节流


在服务器端,您必须将数据转换回Unicode。

这并不强制转换,但取决于读取数据的HTML的字符集,元数据中的显示字符集和文件格式的保存方式,它将变得非常有趣

因此,当您保存HTML和Javascript时,将两者都保存为UTF-8


此外,在PHP中,您可能需要一些mb_内部编码操作…

Javascript不会“强制”这样的代码页。 要获得所需的结果,只需使用escape()和unescape()传递扩展ASCII


F.

我想您可以尝试使用
encodeURIComponent

var ovrskrift = encodeURIComponent(document.form1.overskrift.value);
您应该使用此选项,而不是
转义
。请阅读此页上的详细信息:

它说:

[…]应尽可能避免使用escape()。 最好的选择通常是encodeURIComponent()。 [……]

…根据我的经验,这似乎也是正确的。

两个未经测试的建议(与您的代码示例相关):

(1) 使用字符集属性引用外部JS:

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

(2) 也许可以在PHP方面做更多的事情,比如剥离非UTF8字符:

<?php
$result = iconv("UTF-8","UTF-8//IGNORE", $result);
?>

我意识到这个问题已经在两年前发布了,但PQW的答案之所以有效,是因为客户端(浏览器)应该使用与页面相同的字符集进行回复(从而在元标记中指定UTF-8)。使用Javascript不会改变这一基本假设(因此无论是否涉及Javascript,答案都是正确的)


“最正确的方法”是在服务器响应头中指定字符集,但由于这并不总是可能的(可能您无法控制它们或其他一些原因),元方法是实现这一点的下一个最佳方法。

即警报(转义(“æå”);警报(unescape(“%E6%F8%E5”);在我看来,“application/x-www-form-urlencoded;charset:utf-8;”应该是这样的:“application/x-www-form-urlencoded;charset=utf-8;”或者我做错了。我试着把它放在我的javascript文件中,它应该是(小写)“meta”(如果你写的是XHTML),或者不带“/”(如果你写的是HTML)。请注意,真正的HTTP头将覆盖meta的任何声明。似乎缺少的只是添加以下内容:头('Content-Type:text/plain;charset=utf-8');在我的sendtext.php文件的顶部,这个问题很久以前就发布了,但我必须说:请告诉我这不是您实际的SQL处理代码,因为它会让您面临SQL注入攻击……这是PQW答案的一个很好的脚注。您触及了一个重要的点:您正在请求html页面,而html页面正在引入js。因此,实际上,您应该关注“父”html文件中使用的编码,方法是发送适当的头(例如,当由脚本提供服务时)或设置元标记。
<?php
$result = iconv("UTF-8","UTF-8//IGNORE", $result);
?>