通过AJAX获取下拉选项,在像æøå这样的字符时不起作用

时间:2013-02-24 17:59:55

标签: php jquery ajax encoding utf-8

我的名字是Dan,我之前看到过UTF编码的问题,在stackoverflow上阅读与此类问题相关的帖子,尝试了你们发布的解决方案,但我不得不说我被卡住了。

好的,我正在制作的是一组下拉列表,当更改值时,通过AJAX(jQuery)和PHP填充。

  1. 所有文件都保存为UTF-8
  2. 所有显示的index.php文件都有元标记charset = utf-8
  3. PHP脚本根据文件夹名称读取目录并输出列表选项:

    $fylke = $_GET['fylke'];
    foreach (new DirectoryIterator('../pdfs/'.$fylke) as $fileInfo) {
        if($fileInfo->isDot()) continue;
    $kommune = $fileInfo->getFilename();
    
    echo "<option name='kommune' value='".$kommune."'>".$kommune."</option>";
    }
    

    Javascript根据列表框更改运行函数:

    function getKommune() {
        $.get("get.php",
      {
        fylke: $("#fylke").val()
      },
      function(data){
        $('#kommune').html(data);
        $('#kommune').attr('disabled', false);
      $('#kommune').prepend('<option selected="selected" value="---">---</option>');
      });
    }
    

    所有没有特殊字符的文件夹和文件名列表都没问题。 当谈到特殊字符(æøå)时,列表框不会随文件夹或文件一起更新。

    我必须说我是编码的初学者,非常感谢帮助。 以下是非工作项目的链接:http://www.tbds.no/pdfdl/

    感谢您的大力帮助。

    如果您需要,我想与您分享脚本,但实施安全性! :www.dan-levi.no/playground/pdfdown/files.zip

1 个答案:

答案 0 :(得分:0)

我认为您遇到的基本问题是系统的文件名不是UTF-8,而是直接从文件系统中提取数据并将其推送到浏览器“这是UTF-8”

我认为您需要进行三项更改:

首先,在get.php的顶部和index.php的顶部,在输出任何内容之前执行此操作:

<?php
// Set utf-8 in the header, not just as a meta tag
header('Content-Type: text/html; charset=utf-8');
?>

如果您不这样做,那么浏览器会将您的get.php输出视为ISO-8859-1,因为您使用get.php吐出的html片段没有meta 1}}标签,否则告诉它。

其次,在您引用get.php的位中,您应该通过fylke传递传入的utf8_decode参数,并通过utf8_encode传递回浏览器的任何内容:

$fylke = utf8_decode($_GET['fylke']);
foreach (new DirectoryIterator('../pdfs/'.basename($fylke)) as $fileInfo) {
    if($fileInfo->isDot()) continue;
    $kommune = utf8_encode($fileInfo->getFilename());
    echo "<option name='kommune' value='".$kommune."'>".$kommune."</option>";
}

第三,在index.php中,将utf8_encode应用于文件名,然后再将其发送到浏览器。