在javascript中显示特殊字符


Display special characters in javascript

我正在使用Google Places API为我的应用程序提供城市,国家等的下拉菜单列表。我对包含以下代码的文件使用AJAX请求:

$results = file_get_contents("https://maps.googleapis.com/maps/api/place/autocomplete/json?types=(regions)&language=EN&offset=4&key=" . $key . "&input=" . $input);
    $decode = json_decode($results, true);
    foreach($decode["predictions"] as $value){
        $json_array[] = $value["description"];
    }
    echo json_encode($json_array);

在这方面似乎一切正常,但是当JSON返回给AJAX应用程序时,一些字符出现错误。例如,当我试图显示结果时,"s o Paulo"中的"ã"显示为",,"或"S,,o Paulo"。如果我警告结果,字符确实在弹出窗口中正确显示-所以当我把结果给javascript在下拉菜单中显示时,我似乎错过了一些东西。(同样令人恼火的是,当用户从下拉菜单中选择时,错误编码的结果最终会进入我的数据库。)

我已经尝试用"utf8_encode()"编码每个字符串之前,我把它添加到"$json_array"(在PHP文件中,当然),但这似乎只会使事情复杂化-似乎结果是双重编码的东西,当它最终显示在javascript中。

另外,我应该注意到网页在meta标签中有UTF-8字符集。

作为后续:

我创建了一个简单的HTML页面,在其中我在一个div中显示了"ã",它确实正确地显示了出来。我还使用jQuery在页面加载时在另一个div中显示相同的字符,这也正确显示。我甚至不需要在那个页面上设置编码。所以我只能假设,因为这个测试页面是普通的HTML,问题来自我的PHP设置。

我在另一个PHP测试页面的头部添加了以下内容:

mb_internal_encoding("UTF-8");
mb_http_output("UTF-8");
mb_http_input("UTF-8");
mb_language("uni");
mb_regex_encoding("UTF-8");
ob_start("mb_output_handler");
header("Content-Type: text/html; charset=UTF-8");

,但我仍然看到字符不正确显示。所以到目前为止,我已经添加了上述内容,将php.ini中的default_encoding更新为UTF-8,并检查meta标记是否指定UTF-8。现在我真的开始生气了!

使用其中一个header:

header('Content-type: application/json');
header('Content-Type: text/html; charset=UTF-8);
如果不懂阿拉伯语,

可以帮我。

可能是网页无法识别该字符。要解决这个问题,请为该字符使用HTML代码。

例如,ã的HTML代码为ã

你可以在这里找到更多的信息。


检查PHP字符串中的特殊字符并转换它们。

$mystring = 'São Paulo';
$findme   = 'ã';
$pos = strpos($mystring, $findme);
if ($pos != false) $findme = "ã";

这是最愚蠢的事情…但我学到了很多关于字符编码的知识。事实证明(我没有提到这一点,因为它似乎不相关)Bootstrap中的Helvetica字体无法显示这些特殊字符。是的,wtf ?我把所有可能的编码选项都设置为"UTF-8",一直以来都只是愚蠢的CSS字体选择。所以最后我把字体改成了"Arial",问题立刻就解决了。

感谢大家的参与。