因为有网站要换空间,用PHPMyAdmin导出的数据在重新导入时总是会出现问题,大多是因为特殊字符没有转意。我感觉可行的办法是用PHP一条一条的读入sql插入语句,然后对每条语句的数据部分进行转意,
现在想出的具体方法是利用preg_replace前的正则找到数据,再将其传给一个函数处理(我这里用了PHP自带的addslashes()函数),然后替换回去。
例如:<?PHP
$sql = "INSERT INTO `content` VALUES('', 1, '生物卫生', 'tran,fer, R'NA', '细胞内分子量最小的核酸,其功能是在蛋白质合成过程中作为各种氨基酸的载体并将其转呈给mRNA。');
";
echo preg_replace("/(?<=')([^']*)(?=',)/is", addslashes($1),$sql);
?>呵呵,这样的语句是有问题的,因为preg_replace的第二个参数是不能回调的,不知谁有相类似可行的方法呢?
现在想出的具体方法是利用preg_replace前的正则找到数据,再将其传给一个函数处理(我这里用了PHP自带的addslashes()函数),然后替换回去。
例如:<?PHP
$sql = "INSERT INTO `content` VALUES('', 1, '生物卫生', 'tran,fer, R'NA', '细胞内分子量最小的核酸,其功能是在蛋白质合成过程中作为各种氨基酸的载体并将其转呈给mRNA。');
";
echo preg_replace("/(?<=')([^']*)(?=',)/is", addslashes($1),$sql);
?>呵呵,这样的语句是有问题的,因为preg_replace的第二个参数是不能回调的,不知谁有相类似可行的方法呢?
如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。 Note: 本修正符在 PHP3 中不可用。
Example#4 使用 /e 修正符<?php
preg_replace ("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?> 这将使输入字符串中的所有 HTML 标记变成大写。
把你有问题的sql语句贴上来看看 ^^