UTF-8编码在JavaScript中不起作用

UTF-8编码在JavaScript中不起作用,javascript,php,json,html,Javascript,Php,Json,Html,我有以下一段代码,部分是从SO中的另一个线程获得的: <?php header('Content-Type: text/html; charset=ISO-8859-1'); $origadd = $_SESSION["OriginAdd"] // $_SESSION["OriginAdd"] has a value "rueFrédéricMistral"; echo $origadd; // This displays rueFrédéricMistral ?> <h

我有以下一段代码,部分是从SO中的另一个线程获得的:

<?php
header('Content-Type: text/html; charset=ISO-8859-1');
$origadd = $_SESSION["OriginAdd"] // $_SESSION["OriginAdd"] has a value "rueFrédéricMistral";
echo $origadd;   // This displays rueFrédéricMistral
?>

<html>
    <head>
    <meta charset="utf-8">
    <script type="text/javascript">
        var source = <?php echo json_encode($origadd); ?>;
        alert(source);  // This displays null
    </script>
    </head>
    ....
    ....
</html>

var源=;
警报(来源);//这将显示空值
....
....

正如我在评论中提到的,echo语句为我提供了原始字符串。但是,JS中的警报框给了我一个空值,因此后续代码失败。

这里的问题是编码问题,重音在这里起了主要作用。例如,如果字符串只是“abc”,它会正确地提醒它。如果您希望两种内容都能正确显示,则所有内容都需要UTF-8

因此,您需要将文件的编码更改为UTF-8,并将头设置为UTF-8

这一点得到了成功的验证

<?php

header('Content-Type: text/html; charset=UTF-8');

$origadd = "rueFrédéricMistral";
echo $origadd;   // This displays rueFrédéricMistral

?>


<script type="text/javascript">
    var source = <?php echo json_encode($origadd); ?>;
    alert(source); 
</script>

var源=;
警报(来源);
注:
$origadd=“rueFrédéricMistral”是从持有该值的原始帖子中使用的

我说过字符串需要用引号括起来,否则它会被当作常量。(有人删除了我的第一条评论)

注:

使用
标题('Content-Type:text/html;charset=ISO-8859-1')
而不是
标题('Content-Type:text/html;charset=UTF-8')
,您的初始HTML将显示
rueFrédéricMistral
,而不是预期的
rueFrédéricMistral

编辑:

正如OP所说,我引用它也会起作用

  • var-source=''
根据

如果使用
var source=''作为我的示例并引用它(您没有做的事情),您将看到您的数据就在那里


我重新打开了它,但你不能像那样使用
json\u encode
。如果使用
var source=''作为我的示例并引用它(您没有做的事情),您将看到您的数据就在那里。网上有很多这样的例子。其中一个,请参见和@Fred ii-为什么不能像那样使用
json\u编码
?实际上,这是在这种情况下使用它的首选方法。@Neeraj向我们展示了由此生成的实际HTML,特别是
var source=…
行的确切外观。还向我们展示了如何使用
echo bin2hex($origadd)
@deceze我的错误对该字符串进行精确编码