我的名字是Dan,我之前看到过UTF编码的问题,在stackoverflow上阅读与此类问题相关的帖子,尝试了你们发布的解决方案,但我不得不说我被卡住了。
好的,我正在制作的是一组下拉列表,当更改值时,通过AJAX(jQuery)和PHP填充。
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
答案 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
应用于文件名,然后再将其发送到浏览器。