JavaScript 转义在 WebHost 上不起作用

javascript escape not working on webhost

本文关键字:不起作用 WebHost 转义 JavaScript      更新时间:2023-09-26

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

我使用 escape 使字符串"Café"准备好在 javascript 的 url 中使用。

"&place=" + escape(placename);

字符串被翻译成"Caf%E9",然后在下一页(即 php 页面)中表示为"Café"。

一切都很好,但是,当我将代码上传到我的虚拟主机时,它被转换为"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"/>

我也尝试使用编码URIComponent,但它给出了相同的结果

"&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,科恩

escape不是

用来转义查询字符串参数的,这就是encodeURIComponent的用途。 escape做一些类似但不同的事情,因此它与等式的服务器一半不是 100% 兼容的。

但是,另外,您不能使用一种编码对文本进行编码,而使用不同的编码在另一端成功解码文本。您应该能够通过 apache 标头将页面放入 UTF-8 而不是 ISO-8859-1 中。如果你不能在标题中做到这一点,你可以在HTML中做到这一点:在head的顶部:

<meta charset="UTF-8">

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

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

解决方案

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

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

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

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