javascript转义不在webhost上工作

时间:2012-06-20 13:00:33

标签: javascript character-encoding

我对在Apache上运行的javascript有点新,但我有以下问题。

我使用escape来使用javascript将字符串“Café”准备好在url中使用。

"&place=" + escape(placename);

字符串被翻译为“Caf%E9”,然后在下一页中表示为“Café”,这是一个php页面。

一切都很好,但是,当我将代码上传到我的网站主机时,它被翻译为“Caf%C3%A9”。并在页面中显示为“Café”。

我使用UTF-8进行解码。我的webhost使用iconv.input_encoding ISO-8859-1。

我认为这就是问题所在。解决这个问题的最佳方法是什么?将我的UTF-8更改为ISO-8859-1还是有一些转换器功能?

修改 我有UTF8元标记

<meta http-equiv="content-type" content="text/html; charset=utf-8"/>

我也试过使用encodeURIComponent,但它给出了相同的结果

"&place=" + encodeURIComponent(placename);

编辑:添加代码

这是代码,它在本地的行为与在网络上的行为不同。该代码使用Google Maps API。

    var lat = place.geometry.location.lat();
var lng = place.geometry.location.lng();
var placename = place.name;
var placerating = place.rating;
if (placerating == undefined) {
    placerating = 0;
}
var placeaddress = place.vicinity;
var website = place.website;
var url = place.url;

var day = new Date();
var m = day.getMonth() + 1;
var d = day.getDate();
var y = day.getFullYear();

var formUrl = "myform.php?d=" + d + "&m=" + m + "&y=" + y + "&lat=" + lat + "&lng=" + lng + "&place=" + encodeURIComponent(placename);

注意,当我发出警报(地名)时,它会在两个环境中给出相同的结果。即, “咖啡馆”

我的webhost使用了另一种强制页面使用ISO-8859-1的编码。即使我使用了html元标记。

将以下PHP标头添加到页面的开头

header("Content-type: text/html; charset=utf-8");

TIA, 科恩

2 个答案:

答案 0 :(得分:1)

escape不是用于转义查询字符串参数,而是encodeURIComponent的用途。 escape执行类似的,但不同,因此它与服务器的一半不完全兼容。

但是,另外,您不能使用一种编码对文本进行编码,并使用不同的编码在另一端成功解码。您应该能够通过apache标头将页面放在UTF-8而不是ISO-8859-1中。如果您无法在标题中执行此操作,则可以在HTML中执行此操作:位于head的顶部:

<meta charset="UTF-8">

...然后,当然,确保文件确实以UTF-8编码(例如,检查编辑器设置等)。

StackOverflow上的

This other answer也可能有用,它讨论了与URI相关的编码。

答案 1 :(得分:0)

我的webhost使用了另一种强制页面使用ISO-8859-1的编码。即使我使用了html元标记。

将以下PHP标头添加到页面的开头

header("Content-type: text/html; charset=utf-8"); 

或者,我要求我的webhost将编码更改为UTF-8,这是他们所做的。