2014-09-26 4 views
2

Это правильный способ избежать строки на всякий случай, или я могу вставить строку, подобную этой, без дополнительного экранирования?Правильный способ избежать строки после замены котировок?

$filenamefordb = preg_replace('/[^A-Za-z0-9а-яА-Я_\.\-]/u', '', $filenamefordb); 
$query = "INSERT INTO file SET filename='$filenamefordb"; 

Я не использую mysqli_escape, потому что мне также нужно имя без кавычек в другом месте

+1

Почему бы не использовать спасаясь функции, предусмотренные вашим MySQL API? Тогда вы узнаете, что это правильно ... –

+0

, потому что мне нужно имя файла без каких-либо символов. – x1site

+0

. Что хорошего делает случайное удаление кучки символов? Разве вы не просто ломаете множество возможных входных имен файлов? Зачем? –

ответ

1

Почему вы не избежать строки с использованием PDO?

<?php 
    $conn = new PDO('sqlite:/home/lynn/music.sql3'); 

    /* Complex string */ 
    $string = "Co'mpl''ex \"st'\"ring"; 
    print "Unquoted string: $string\n"; 
    print "Quoted string: " . $conn->quote($string) . "\n"; 
?> 

Это выведет

Unquoted string: Co'mpl''ex "st'"ring 
Quoted string: 'Co''mpl''''ex "st''"ring' 

Ссылка: http://php.net/manual/it/pdo.quote.php

+0

, потому что мне также нужна строка без quetes, просто a-z и числа (мне нужно это для другого места) – x1site

0

вы можете избежать его с помощью обобщенной функции PHP:

$filenamefordb = mysql_escape_string ($filenamefordb); 
$query = "INSERT INTO file SET filename='$filenamefordb"; 
+1

Примечание: 'mysql_' устарел. –

+1

Я знаю о mysqli_escape, но мне нужно также имя без каких-либо специальных символов. – x1site

+0

@ x1site: Вам нужно подумать о том, откуда это имя, в первую очередь, и почему у него есть «специальные символы», и почему вы не хотите их. Вероятно, вы должны отклонить их намного дальше от своего стека вызовов. –