Closed. This question is
off-topic。它当前不接受答案。
想改善这个问题吗?
Update the question,所以它是
on-topic,用于堆栈溢出。
2年前关闭。
有什么方法可以删除PHP字符串中间的撇号,但不能删除开头或结尾?
例如,我有一个像
'the cat jumped over the dog's lazy body'
开头和结尾的引号在字符串中并且很重要,因为它们在来自MySQLDump(由BullZip创建的记录,如果重要)中的记录中描绘了该字段。
因此,在上下文中,记录类似于
INSERT INTO `SOMETABLE` () VALUES (1, '32295', NULL, 'RII20109', 'the cat jumped over the dog's lazy body', '11');
我需要一种仅在文本中间而不是在开头或结尾处转义(或删除)引号的方法。我已经尝试了所有形式的str_replace选项,但是觉得我需要一个正则表达式大师来提供帮助,因为我无法定位要更改的引号。
我使用的整个过程是读取传入的文件并将其切碎
$queries = explode(";", str_replace("\n\r", '', $sql));
然后使用MySQL查询执行每一行。中间的撇号把事情搞砸了。
更新资料
抱歉-事后看来,我的问题确实不是很清楚,已经导致一些人走错了路。我正在使用的字符串实际上是整行:
INSERT INTO `SOMETABLE` () VALUES (1, '32295', NULL, 'RII20109', 'the cat jumped over the dog's lazy body', '11');
就像我一开始被误导所指的那样,而不仅仅是其中的一部分。我的错。因此,正如罪孽所暗示的那样,除非我进一步拉开界限(以某种方式抓住VALUES()部分,然后分解内容然后使用建议的技巧),否则实际上无法知道我应该对哪个撇号进行处理。各个领域,天哪,别以为我可以来!
BullZip是MS Access到MySQL的导出程序,是的,我相信它不应该给我带来这种悲伤。它应该避开场间撇号,但是似乎没有设置这样做。
另一个更新
令我非常尴尬的是,经过更多测试之后,我发现BullZip会按应有的方式处理引号,并以斜杠转义。仔细检查后,令人讨厌的字符不是撇号,而是那些讨厌的MS Word“特殊”引号(’)中的一个,我当然可以使用所有常用技术来解决。很抱歉浪费大家的时间:(
如果您的字符串包含单引号,例如:
$string = "'the dog's lazy body'";
为什么不删除所有单引号,然后再将周围的引号放回去?
$new = "'" + str_replace("'","",$string) + "'";