我有一系列正则表达式,其中包括转义字符,我需要存储在mysql表中。
如果我没有转义反斜杠,它将被消除。
我已经尝试在PHP中使用mysql_real_escape_string, addslashes, str_replace来转义反斜杠,并且每次数据库存储双反斜杠而不是单个。
我也尝试在bash中使用sed来转义反斜杠,但它也打印2。
的例子:
$regex = "stackoverflow'.com'/questions'/ask";
$query_text = addslashes($regex);
$query = "INSERT INTO my_table (url) VALUES ('$query_text')";
me@server:$ echo "select * from my_table" | mysql -uuser -Ddatabase -p'password'
stackoverflow''.com''/questions''ask
有什么想法,我做错了吗?
斜杠在mysql客户端的控制台输出中被转义;不在数据库中;)
尝试以交互方式运行客户端:
mysql -uuser -Ddatabase -p'password'
mysql> select * from my_table;
+------------------------------------+
| x |
+------------------------------------+
| stackoverflow'.com'/questions'/ask |
+------------------------------------+
和经常:
mysql -uuser -Ddatabase -p'password' <<< "select * from my_table"
stackoverflow''.com''/questions''/ask
使用--raw
来禁用此转义:
mysql -uuser -Ddatabase -p'password' --raw <<< "select * from my_table"
stackoverflow'.com'/questions'/ask
从手册:
——生,- r
对于表格输出,列周围的"装箱"允许将一个列值与另一个列值区分开来。对于非表格输出(例如在批处理模式下产生的,或者当给出——batch或——silent选项时产生的),输出中的特殊字符将被转义,以便易于识别。换行符、制表符、NUL和反斜杠被写成'n、't、'0和'。——raw选项禁用此字符转义。
mysql_real_escape_string是正确的转义函数。