0

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

我使用转义使字符串“Café”准备好在使用 javascript 的 url 中使用。

"&place=" + escape(placename);

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

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

我使用 UTF-8 进行解码。我的虚拟主机使用 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);

请注意,当我提醒(地名)时,它在两种环境中都会给我相同的结果。即“咖啡厅”

解决方案

我的虚拟主机使用了另一种编码,它强制页面使用 ISO-8859-1。即使我使用了 html 元标记。

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

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

TIA,科恩

4

2 回答 2

1

escape不是为了转义查询字符串参数,encodeURIComponent而是为了。escape做一些类似但不同的事情,因此它不是 100% 与等式的服务器部分兼容。

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

<meta charset="UTF-8">

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

StackOverflow 上的这个其他答案也可能很有用,它讨论了与 URI 相关的编码。

于 2012-06-20T13:03:27.097 回答
0

解决方案

我的虚拟主机使用了另一种编码,它强制页面使用 ISO-8859-1。即使我使用了 html 元标记。

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

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

或者,我要求我的虚拟主机将编码更改为 UTF-8,他们这样做了。

于 2012-06-25T15:17:40.217 回答