könyvtár/file átnevezés speciális karakter esetén
Sziasztok!
Egy olyan gondom van, hogy könyvtárat, illetve file-t kellene átneveznem php-vel, viszont ha speciális karaktert talál akkor, nem nevezi át... Próbáltam iconv-al átkonvertálni a file-nevet, de semmi eredmény...
Csináltam debugot, a script szépen kiszedi illetve átalakítja a spec karaktereket, de mikor átnevezésre kerülne a sor, nem történik semmi. A logban csak annyi van, hogy: warning: rename(xx,yy) z.php. A rendszer felépítése: Windows 8.1 64bit, apache 2.4.10 64bit, illetve php 5.6.0 64bit (charset: utf-8)
Pl a karakterek, amikkel nem kezd semmit: ÷פ`
Köszi a segítséget!
■ Egy olyan gondom van, hogy könyvtárat, illetve file-t kellene átneveznem php-vel, viszont ha speciális karaktert talál akkor, nem nevezi át... Próbáltam iconv-al átkonvertálni a file-nevet, de semmi eredmény...
Csináltam debugot, a script szépen kiszedi illetve átalakítja a spec karaktereket, de mikor átnevezésre kerülne a sor, nem történik semmi. A logban csak annyi van, hogy: warning: rename(xx,yy) z.php. A rendszer felépítése: Windows 8.1 64bit, apache 2.4.10 64bit, illetve php 5.6.0 64bit (charset: utf-8)
Pl a karakterek, amikkel nem kezd semmit: ÷פ`
Köszi a segítséget!
UTF16
$name = mb_convert_encoding($name, 'UTF-16', 'UTF-8');
vagy aziconv
megfelelőjét.Sajnos nem jó ez a
Kód
Kód részlet
$it = new RecursiveIteratorIterator($dirIt, RecursiveIteratorIterator::SELF_FIRST);
$key = 0;
foreach ($it as $file) {
if ($file->isDir()) {
...
$file[$key]['oldName'] = mb_convert_encoding($file->getFileName(), "UTF-16", "UTF-8");
$file[$key]['newName'] = search::fixFileName($file[$key]['oldName']);
...
}
}
a fixFileName class kódrésze:
public function fixFileName($path) {
$ivChar = array("'s","×","&"," ");
$vChar = array("Is","x","And", ".");
$pregInv = array("/[^a-zA-Z0-9\/:_| .-]/","/–/","!\s+!","/_{2,}/","/\.{2,}/");
$pregVal = array("","-",".","_",".");
$newPath = preg_replace($pregInv, $pregVal, str_replace($ivChar, $vChar, $path));
$newPath = trim($newPath, ".");
$newPath = trim($newPath, "-");
$newPath = trim($newPath, "_");
if ($path != $newPath) {
return $newPath;
} else {
return FALSE;
}
}
}
A karakter cserét lehet hogy tisztábban is meg lehet oldani, de a preg_replace() dolgokkal most kezdtem el foglalkozni. Természetesen a rename()-nál a teljes elérési út meg van adva.
A "régi" fájlnevet miért
hm...
Ha nem konvertálom át, akkor
Azt értem, hogy a kiíráshoz
igen... ezt ki is szedtem...
utf16
Windows-1252
próbáltam már ezt is... de
cp 125?
Úgy tudom, a karakterkészlet 1250 és nem 1252.
Miért az utóbbira konvertálsz?
nah igen... igaz..