雖然在 ldapadd 匯入 LDIF 格式檔時,已經將檔案內容轉換 UTF-8 格式,可常匯入了,但是在 ldapsearch 搜尋資料時,看到的卻是亂碼 
 cn 的部分應該是正常的中文字,但現在顯示的卻是亂碼 
 #  /usr/bin/ldapsearch -x -b “ou=Teacher,dc=ldap,dc=tces.ilc.edu.tw” uid=*  
  # extended LDIF  
  #  
  # LDAPv3  
  # base <ou=Teacher,dc=ldap,dc=tces.ilc.edu.tw> with scope subtree  
  # filter: uid=*  
  # requesting: ALL  
  #  
  # t850008, Teacher, ldap.tces.ilc.edu.tw  
  dn: uid=t850008,ou=Teacher,dc=ldap,dc=tces.ilc.edu.tw  
  uid: t850008  
  cn::  5p6X5pit5ZCN   
  objectClass: account  
  objectClass: posixAccount  
  objectClass: top  
  userPassword:: e2  
  loginShell: /bin/bash  
  uidNumber: 953  
  gidNumber: 500  
  homeDirectory: /home/t850008  
  # search result  
  search: 2  
  result: 0 Success  
  # numResponses: 2  
  # numEntries: 1  [@more@]底下的內容參考 PHP 程式: ldapsearch 輸出內容 (LDIF) 轉 UTF-8 編碼 « Jamyy’s Weblog 
 # 建立 php 的轉換檔 
 #  vim /root/utf8ldif.php 
<?php
function fn_output($str) {
if (strpos($str,":: ") > 0) {
//解 Base64 編碼
//當 ldap 欄位名稱後面接的是兩個冒號即表示該欄位內容為 Base64 編碼
$head = substr($str,0,strpos($str," ")-1);
$body = substr($str,strpos($str," ")+1);
$str = $head . " " . base64_decode($body) . "n";
} else if (preg_match('/x5c[A-F0-9][A-F0-9]x5c[A-F0-9][A-F0-9]/',$str)) {
//解 URL 編碼
//URL 編碼出現在註解 (#), ldapsearch -LLL 可取消輸出註解內容
$str = urldecode(str_replace("","%",$str));
}
if (!preg_match('/n$/',$str)) {
//如果處理過後的字串沒有換行符號 (n) 就塞一個給他
$str .= "n";
}
return($str);
}
$line_old = "";
$line_merge = "";
$params = count($argv);
if ($params == 1) {
//未給參數時, 開啟 STDIN 串流
$f = fopen("php://stdin","r");
} else {
//開啟指定檔案
$f = fopen("$argv[1]","r");
}
while (!feof($f)) {
$line = fgets($f);
if (substr($line,0,1) == " ") {
//若該行行首為空白字元, 表示因內容過長而斷行
//以 line_merge 變數合併各段落
if ($line_merge == "") {
$line_merge = trim($line_old) . trim($line);
} else {
$line_merge .= trim($line);
}
} else if ($line_merge > "") {
//輸出合併好的內容
echo fn_output($line_merge);
$line_merge = "";
} else {
//輸出一般內容
echo fn_output($line_old);
}
$line_old = $line;
}
fclose($f);
?>
使用方式 
 #  /usr/bin/ldapsearch -x -b “ou=Teacher,dc=ldap,dc=tces.ilc.edu.tw” uid=* | php /root/utf8ldif.php  
  # extended LDIF  
  #  
  # LDAPv3  
  # base <ou=Teacher,dc=ldap,dc=tces.ilc.edu.tw> with scope subtree  
  # filter: uid=*  
  # requesting: ALL  
  #  
  # t850008, Teacher, ldap.tces.ilc.edu.tw  
  dn: uid=t850008,ou=Teacher,dc=ldap,dc=tces.ilc.edu.tw  
  uid: t850008  
  cn: 林昭名  
  objectClass: account  
  objectClass: posixAccount  
  objectClass: top  
  userPassword:: e2  
  loginShell: /bin/bash  
  uidNumber: 953  
  gidNumber: 500  
  homeDirectory: /home/t850008  
  # search result  
  search: 2  
  result: 0 Success  
  # numResponses: 2  
  # numEntries:  
中文字的部分就可以正常顯示了!



