Hallo,

ik werk voor mijn website met het CMS script van Syndeo.

Hierin zit ook een module om bestanden te uploaden naar de website. Alleen het script hernoemt het bestand (bijv. een *.doc) bij het opslaan in de SQL database, door de spaties te vervangen door een underscore ( _ ).

Dat wil ik niet want hierdoor lukt het me niet bijv. *.doc bestanden te openen die een spatie bevatten. Nu kan ik natuurlijk al mijn document namen vervangen zodat het script er mee overweg kan. Maar kan dit ook anders?

Ik heb in het script nu de volgende code gevonden;

function remove_special_characters($string)
{
# Remove spaces, apostrophe, exclamation marks and replace them with underscore
$string = preg_replace("/[^a-zA-Z0-9-.]/", "_", $string);
$string = normalize($string);

return $string ;
} // end of the 'remove_special_characters()' function

function normalize ($string)
{
# Replace 'special' characters with their counter part.
$table = array(
'ä'=>'S', 'ö'=>'s', 'é'=>'Z', 'û'=>'z', 'C'=>'C', 'c'=>'c', 'C'=>'C', 'c'=>'c',
'¿'=>'A', '¡'=>'A', '¬'=>'A', '√'=>'A', 'ƒ'=>'A', '≈'=>'A', '∆'=>'A', '«'=>'C', '»'=>'E', '…'=>'E',
' '=>'E', 'À'=>'E', 'Ã'=>'I', 'Õ'=>'I', 'Œ'=>'I', 'œ'=>'I', '—'=>'N', '“'=>'O', '”'=>'O', '‘'=>'O',
'’'=>'O', '÷'=>'O', 'ÿ'=>'O', 'Ÿ'=>'U', '⁄'=>'U', '€'=>'U', '‹'=>'U', '›'=>'Y', 'fi'=>'B', 'fl'=>'Ss',
'‡'=>'a', '·'=>'a', '‚'=>'a', '„'=>'a', '‰'=>'a', 'Â'=>'a', 'Ê'=>'a', 'Á'=>'c', 'Ë'=>'e', 'È'=>'e',
'Í'=>'e', 'Î'=>'e', 'Ï'=>'i', 'Ì'=>'i', 'Ó'=>'i', 'Ô'=>'i', ''=>'o', 'Ò'=>'n', 'Ú'=>'o', 'Û'=>'o',
'Ù'=>'o', 'ı'=>'o', 'ˆ'=>'o', '¯'=>'o', '˘'=>'u', '˙'=>'u', '˚'=>'u', '˝'=>'y', '˝'=>'y', '˛'=>'b',
'ˇ'=>'y', 'R'=>'R', 'r'=>'r',
);

return strtr($string, $table);
}


is dit de boosdoener? En zo ja hoe kan ik deze code veranderen zodat hij de spaties niet langer vervangt door underscore?

Graag hulp.

BVD

HJ

AANVULLING:
ik kan ge-uploade bestanden met een spatie in de bestandsnaam wel downloaden alleen krijg ik dan een blanco document. ;-(
in ieder geval kun je de streepjes weer snel genoeg in spaties veranderen door de volgende code:

<?php $string = implode(' ', explode('_', $string)); ?>

ik doe het even uit mijn hoofd.
Dank voor de reactie..

ik heb geprobeerd je line toe te voegen zodat de wijziging ongedaan werd gemaakt. Helaas werkte het niet.

Is de plaatsing van je line nog essentieel?

Heb het nu oa zo geprobeerd;


function remove_special_characters($string)
{
# Remove spaces, apostrophe, exclamation marks and replace them with underscore
$string = preg_replace("/[^a-zA-Z0-9-.]/", "_", $string);
$string = implode(' ', explode('_', $string));
$string = normalize($string);

return $string ;
} // end of the 'remove_special_characters()' function

Je zou toch denken dat hij de wijziging dan direct opheft?

Mvg, HJ

[size=xsmall]Toevoeging op 23/10/2012 00:31:43:[/size]

Thanks met behulp van een ander fora vond ik waar ik jou line moest plakken. Het werkt!

Dank
Kom op zeg, plak dit voorbeeld eens in een editor en sla dat als test.php op en zie het resultaat.

<?php
$string = een_bestandsnaam_met_streepjes;

$string = implode(' ', explode('_', $string));

echo $string;
?>

[size=xsmall]Toevoeging op 23/10/2012 01:24:07:[/size]

ohhhhhh okee het is dus toch gelukt :)

Reageren