0

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

好的,我正在做的是一组下拉列表,当 tha 值发生更改时,这些下拉列表会通过 AJAX (jQuery) 和 PHP 填充。

  1. 所有文件都保存为 UTF-8
  2. 显示所有内容的 index.php 文件具有元标记 charset=utf-8

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

4

1 回答 1

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,因为您吐出的 html 片段get.php没有meta标签来告诉它。

其次,在您引用的位中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

于 2013-02-24T18:45:38.927 回答