使用fgetcsv()在PHP CSV上载中转义撇号时出现问题

使用fgetcsv()在PHP CSV上载中转义撇号时出现问题,php,mysql,csv,escaping,apostrophe,Php,Mysql,Csv,Escaping,Apostrophe,我正在通过fgetcsv()将CSV文件中的电子邮件地址上载到MySQL数据库中。我遇到的问题是,我无法逃避包含撇号(或单引号)的电子邮件地址 所以,O'Keefe@aol.com不会变成OKeefe@aol.com 我知道这是应该发生的,但是我一直无法找到一个有效的解决方案来摆脱撇号。有人能帮我吗?这是我的密码: while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) { $num

我正在通过
fgetcsv()
将CSV文件中的电子邮件地址上载到MySQL数据库中。我遇到的问题是,我无法逃避包含撇号(或单引号)的电子邮件地址

所以,
O'Keefe@aol.com
不会变成
OKeefe@aol.com

我知道这是应该发生的,但是我一直无法找到一个有效的解决方案来摆脱撇号。有人能帮我吗?这是我的密码:

while (($data = fgetcsv($handle, 1000, ',')) !== FALSE)
            {

                $num = count($data);
                $row++;
                for ($c=0; $c < $num; $c++) {
                    //echo $data[$c] . "<br />\n";
                    $clean_value = cleanse($data[$c]);

                    if(validEmail($clean_value)){
                        $query = mysql_query("INSERT INTO addresses (lid, email_addresses) VALUES ('$lid', '$clean_value')");
                    }else{
                        if($clean_value != ""){
                            $invalid_addresses .= $clean_value.', ';
                        }
                    }

                    /*if(mysql_error()){
                        $failed_addresses .= $data[$c].', '.mysql_error() . "<br />\n";
                    }*/
                }
            }

…这对我不起作用

我不知道你的
cleanse
函数的确切功能,但为什么不使用呢?这就是它的用途。

我不知道你的
cleanse
函数的确切功能,但为什么不使用呢?这就是它的用途。

使用。

使用。

我不知道电子邮件地址中的单引号是否有效,但请看这一行:

试着这样使用它(盖子是一根绳子吗?)


我不知道电子邮件地址中的单引号是否有效,但请看这一行:

试着这样使用它(盖子是一根绳子吗?)


嗨,helle,电子邮件地址中确实允许使用单引号。我尝试了你的建议,但仍然没有得到转义单引号…*将单引号更改为转义双引号。现在我在mysql数据库上试用了一下,效果很好。。。对不起,我不能为你做更多了。您可能有一些编码问题。此字符串是mysql\u real的精确结果。。。您发布的字符串的名称:OKeefe@aol.com试试mb_detect_encoding()来找出编码。嗯,我试过了,但还是没有成功。使用mb_detect_encoding(),每个电子邮件地址都是ASCII。下面是my cleanse()所做的:preg_replace('/[^(\x20-\x7F)]*/','$str);嗨,helle,电子邮件地址中确实允许使用单引号。我尝试了你的建议,但仍然没有得到转义单引号…*将单引号更改为转义双引号。现在我在mysql数据库上试用了一下,效果很好。。。对不起,我不能为你做更多了。您可能有一些编码问题。此字符串是mysql\u real的精确结果。。。您发布的字符串的名称:OKeefe@aol.com试试mb_detect_encoding()来找出编码。嗯,我试过了,但还是没有成功。使用mb_detect_encoding(),每个电子邮件地址都是ASCII。下面是my cleanse()所做的:preg_replace('/[^(\x20-\x7F)]*/','$str);Hi Sjoerd-我尝试使用mysql“U real”escape”字符串,但在单个quoteHi Sjoerd上仍然没有反斜杠-我尝试使用mysql“U real”escape”字符串,在单个quoteMy cleanse函数上仍然没有反斜杠。如果您的函数删除了非ASCII字符,然后,剩余的单引号应以这种方式转义。您确定这不是一个特殊字符(可能是从Word粘贴的)?我已经测试过了,它应该可以工作:
echomsql\u real\u escape\u string(“O”Keefe@aol.com"); // 哦Keefe@aol.com
My Clean函数从电子邮件地址中删除任何非ASCII字符如果您的函数删除了非ASCII字符,则剩余的单引号应以这种方式转义。您确定这不是一个特殊字符(可能是从Word粘贴的)?我已经测试过了,它应该可以工作:
echomsql\u real\u escape\u string(“O”Keefe@aol.com"); // 哦Keefe@aol.com
仔细检查您实际访问的SQL语句(通过validEmail()函数)您应该使用mysql\u real\u转义字符串,并确保您实际连接到数据库。仔细检查您实际访问的SQL语句(通过validEmail()函数)您应该使用mysql\u real\u转义字符串,并确保您实际连接到数据库。
$query = mysql_query("INSERT INTO addresses (lid, email_addresses) VALUES ('$lid', \"". mysql_real_escape_string($clean_value) ."\")");
$query = mysql_query("INSERT INTO addresses (lid, email_addresses) VALUES ('$lid', '$clean_value')");
$query = mysql_query("INSERT INTO addresses (lid, email_addresses) VALUES (".$lid.",\"". mysql_real_escape_string($data[$c])."\")");