Наверняка некоторые уже столкнулись с проблемой передачи с использованием PHP имен файлов, содержащих кавычку (апостроф).


Есть решение в лоб: отключить магические кавычки (magic_quotes_gpc). Но это решение меня лично меня не устраивало.


И как говорится на каждую хитрую ж... найдется х... с винтом. Так вот я предлагаю решение не влоб, а в обход.

 

Допустим у нас есть форма:

Код:

<form name="f1" ENCTYPE="multipart/form-data" method="post" action="#" target="B">

<input type="file" name="filename">

<input type="submit name="btn" value="submit">

</form>

Меняем её на следующий код (разумеется без JavaScript тут не обойтись):

Код:

<script>

function SetNameAndSubmit(thv) { document.forms['f1'].elements['filename1'].value = thv.substring (thv.lastIndexOf ("\\\") +1, thv.length); document.forms['f1'].submit() }

</script>

<form name="f1" ENCTYPE="multipart/form-data" method="post" action="#" target="B">

<input type="file" name="filename">

<input type="hidden" name="filename1" value="">

<input type="button" value="Submit" onClick="SetNameAndSubmit(document.forms['f1'].elements['filename'].value);"></form>

Что мы будем иметь в итоге?

На стороне "получателя" данных полное имя файла будет содержаться в $_POST['filename1'] или $_REQUEST['filename1'].

Разумеется оно будет иметь вид: Ivan\'Ivanov.mp3 вместо Ivan'Ivanov.mp3.

Можете обработать его с помощью функции stripcslashes().

В то время как $_FILES['filename']['name'] все также будет содержать лишь обрезанное после кавычки имя Ivanov.mp3.

 

Add comment


Security code
Refresh