Har laget meg et enkelt opplastingsskript for filer og kom da over et problem med rawurlencode().
Slet med å få rawurlencode() til å håndtere tegn som ( ) { } [ ] og whitespace riktig i filnavn. Skrev derfor følgende enkle funksjon for å strippe alle uønskede tegn fra filnavnet.
// A list of unwanted characters in filenames
$removeChars = ” (){}[]“; // All unwanted characters
$file_name = stripTheFollowingFromString($file_name, $removeChars); // Remove them
// URL encode the string
$file_name = rawurlencode($file_name);
$removeChars = ‘ (){}[]~?/\\\’”=+<>:;,*%|’; // All unwanted characters
$file_name = stripTheFollowingFromString($file_name, $removeChars); // Remove them
$file_name = strtolower($file_name); // Lowercase everything
$file_name = rawurlencode($file_name);
/**
* Loops through all unwanted chars in string and removes them
*
* @param String $string The string.
* @param String $chars The unwanted characters.
*
* @return String The new string without the unwanted chars.
*/
function stripTheFollowingFromString($string, $chars){
// Split unwanted chars to array
$charArr = str_split($chars);
// Loop through each char in charArr and remove them from string
$newString = $string;
for($i = 0; $i < count($charArr); $i++) {
$removeThis = $charArr[$i];
$newString = str_replace($removeThis, “”, $newString);
}
return $newString;
}
Så hvis noen andre har samme problem, værsågod, en veldig simpel funksjon for å unngå det problemet!
Har også prøvd å utf8_encode() først, til ingen nytte. Synes forresten det er veldig rart at rawurlencode() ikke takler filnavn som feks “Mitt Bilde (1).jpg”, det blir fullstendig kluss med kombinasjonen whitespace + (. Kan være jeg som overser noe helt banalt, men denne lille fiksen løste problemet for meg hvertfall