2010-11-16 4 views
0

string-Escaping & (специальные символы) в MySql или PHP

<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/ebopIWPoXI0?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ebopIWPoXI0?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object> 

Что сохраняется в базе данных -

<object width=\"480\" height=\"385\"><param name=\"movie\" value=\"http://www.youtube.com/v/ebopIWPoXI0?fs=1 

Пользуетесь - mysql_real_escape_string(), который не помогает с & :

$_POST['desc'] = mysql_real_escape_string($_POST['desc']); 
mysql_query('INSERT INTO user_showcase(title, description, user_id, date_n_time) VALUES("'.$_POST['title'].'", "'.$_POST['desc'].'", "'.$_SESSION['uid'].'", NOW())') or die(mysql_error()); 
mysql_close($con); 

HTML, -

<textarea id="desc_in" cols="40" rows="10"></textarea> 
+0

Вам не нужно бежать '' & для MySQL. – Gumbo

+2

Вы не говорите нам, как вы его там храните. Я не могу думать ни о чем на стороне MySQL, которая должна реагировать на &. Причудливо использовать HTML-объекты в URL-адресе, что, вероятно, должно быть URI экранировано (как в другом вопросе). Но я не вижу, какая уместность была бы для этой проблемы. –

+0

Хмм ... тогда в чем проблема? – Sussagittikasusa

ответ

1

mysql_real_escape_string() является правильный механизм, если вы используете устаревшую библиотеку MySQL. Если вы получаете все эти дополнительные обратные косые черты, это, вероятно, потому, что ваша среда PHP очень старая. Выполнить <?php phpinfo(); ?> и найти директивы, которые начинаются с magic_:

magic_quotes_gpc 
magic_quotes_runtime 
magic_quotes_sybase 

В идеале, они должны быть отключены. Если вы запускаете PHP как модуль Apache, вы можете изменить его в .htaccess файле:

php_flag magic_quotes_gpc Off 
php_flag magic_quotes_runtime Off 
php_flag magic_quotes_sybase Off 

Если вы запускаете PHP как CGI, вы, вероятно, пользовательский файл php.ini где-то в вашем аккаунте.

Как уже упоминалось, & не является специальным символом для MySQL.

Ответ на обновленный вопрос

Стандартная строка разделителей в SQL является одинарная кавычка, а не двойные кавычки:

SELECT 'I am a string'; 
+0

Я отключил их, но я столкнулся с той же проблемой. – Sussagittikasusa

+0

Вы уверены, что это не * вы * тот, кто вводит обратную косую черту? –

+0

После того, как волшебные кавычки отключены, обратные косые черты исчезают, но данные, хранящиеся в базе данных, все еще заканчиваются на «& amp». – Sussagittikasusa

-1

Вы должны использовать параметризованный запрос

+0

Хммм ... что это? – Sussagittikasusa

+0

Вы серьезно отказались от меня, потому что вы слишком глупы, чтобы узнать, что такое параметризованный запрос? Вау, теперь я помню, почему я не занимаюсь PHP-разработчиками ... –

Смежные вопросы