【问题标题】:php mysql results backslashes removedphp mysql 结果反斜杠已删除
【发布时间】:2011-09-15 21:22:40
【问题描述】:

我有一个包含文件名和一些其他信息的表格。当我运行以下查询时:

select * from `documentinfo` WHERE `num`='40217'

我得到正确的结果:

Array
(
    [num] => 40217
    [datetime] => 2011-09-15 15:22:07
    [date] => 2011-09-15
    [filename] => C:\redoak\DocumentsIN\Filer\8883894460_3044564210_07334802020001.mp3
)

当我运行查询时:

QUERY:`filename` REGEXP '^C:\\redoak\\DocumentsIN\\Filer'

我明白了:

Array
(
    [num] => 35910
    [datetime] => 2010-12-03 17:34:38
    [date] => 2010-12-03
    [filename] => c:
edoakDocumentsINFiler8883894460_3043926485_05863748580001.mp3
)

请注意,结果已从文件夹名称中删除了 \。

我用下面的 php 来显示这个:

while ($row = array_change_key_case(mysql_fetch_assoc($webquery), CASE_LOWER)) 
{
    print_r($row);  
}

任何 num 的查询都可以正常工作。如果模式不包含反斜杠,则正则表达式查询有效。如果它包含反斜杠,它可以工作,但从表返回的数据缺少它的反斜杠。即使查询找到正确的记录。感谢橡树

是问题所在:character_set_results 正则表达式查询是否默认返回不同的字符集结果然后是 = 查询?


我尝试了以下方法来更改字符集以查看发生了什么:

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'") or die("ERROR SETTING CHAR SET");      
echo '<pre>debug: encoding=', mysql_client_encoding(), '</pre>';

$webquery=mysql_query($query);

echo '<pre>debug: encoding=', mysql_client_encoding(), '</pre>';

它总是表示 latin1

我用mysql_set_charset('utf8');,改成utf8,结果没变。

【问题讨论】:

  • 你在`select * from documentinfo WHERE num='35910'`上得到了什么?
  • 它正确返回文件名中的反斜杠。

标签: php mysql regex


【解决方案1】:

MySQL 将反斜杠字符解释为 转义字符。对于查询中的反斜杠,请使用双反斜杠 \\

【讨论】:

  • 谢谢,但是结果是一样的,只要找到正确的记录,查询就可以工作。但是,返回的数据已被更改,反斜杠和它们似乎“转义”的一些其他字符已被删除......在我从正则表达式或类似查询获得结果之前,但不是从 = 查询谢谢!橡木
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2018-04-14
  • 2018-07-26
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多