2017-08-16 108 views
0

我有一个带有站名列表的CSV文件。一些名字包含正确的单引号:'(不是普通的单引号)。PHP/MySQL - 不允许我插入(或替换)右侧单引号“'”

我想从文件中读取数据并插入到数据库中。所有的工作站都可以正常工作,但引用的话会以0的格式插入到数据库中。

我试图将其替换为普通的引号,但PHP似乎没有在字符串中找到引号。

if(strpos($stationName, "’") !== false){ 
    var_dump($stationName); 
    var_dump(str_replace("’", "'", $stationName)); 
    die(); 
} 

上面的代码永远不会被触发。我需要使用PHP或MySQL中的编码做些什么,我应该如何解决这个问题?字符串的

示例工作正常: Langton Matravers, Crack Lane Bottom (N-bound)

而且例子被插入为0Harman’s Cross, Wilkswood Farm Road (NW-bound)

我使用Laravel如果有什么差别。

谢谢。

编辑:

我已经运行检测解码,这表明我的字符串是ASCII编码 - 我认为这可能是问题,但我似乎无法改变编码?

我运行下面几行:

$stationName = mb_convert_encoding($stationName, "UTF-8", "ASCII"); 
var_dump(mb_detect_encoding($stationName)); 

,仍然可以得到的输出字符串在ASCII

EDIT2:

事实证明,这是问题的实际CSV文件编码和我所用的CSV库(Laravel-Excel)中正在读的方式。调整配置并转换CSV文件编码似乎解决了这个问题。

+0

你正在使用哪种编码? – Jeff

+0

据我所知(在PHP文件和数据库中),“UTF-8” – Giedrius

+0

该字符串根据mb_detect_encoding函数显示为'ASCII' - 但我似乎无法改变它? – Giedrius

回答

0

原来,这是实际的CSV文件编码问题,以及我使用的CSV库的读取方式。调整配置并将CSV文件编码转换为UTF-8似乎解决了这个问题。