我有下面的代码,当我从PHP v.2.17-->v.3.5升级时,它坏了,我不知道它是什么。有人知道可能出了什么问题吗?谢谢
<?php
setlocale(LC_ALL, 'en_US.UTF8');
$goto = $_POST['location'];
function toAscii($str, $replace=array(), $delimiter='-') {
if( !empty($replace) ) {
$str = str_replace((array)$replace, ' ', $str);
}
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
$clean = preg_replace("/[^a-zA-Z0-9'/_|+ -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/['/_|+ -]+/", $delimiter, $clean);
return $clean;
}
?>
没有任何错误,我查看了我的cms日志,没有任何异常。我做了一个简单的测试,结果如下:
<?php
$goto = $_POST['location'];
function toAscii($str, $replace=array(), $delimiter='-') {
if( !empty($replace) ) {
$str = str_replace((array) $replace, ' ', $str);
}
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
$clean = preg_replace("/[^a-zA-Z0-9'/_|+ -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/['/_|+ -]+/", $delimiter, $clean);
return $clean;
}
?>
输出为:<?echo toAscii($goto);?>
输出为:<?echo $goto;?>
当我输出原始表单数据时,它工作得很好,当我输出toAscii($goto)
数据时,不会返回任何结果。
您没有在问题中添加错误消息,但由于代码只使用了一个非标准函数,即iconv
,因此很可能您没有安装/启用iconv扩展。
要解决这个问题,请启用所需的扩展,代码应该可以像您从其他PHP配置中了解的那样工作。
如果扩展是可用的,并且从我的脑海中启用了(PHP 5.3应该是这样),那么你应该为你的问题添加更多信息,到底是什么破坏了。什么没有按预期工作?
要进行故障排除,请在代码上方的位置:
error_reporting(-1);
ini_set('display_errors', 1);
这样可以确保错误和警告直接可见。
为了继续解决问题,让我们在日常工作中小心处理。示例性地,我添加了对iconv
的返回值的检查,同样的检查可以应用于任何类型的变量(测试变量是否包含预期值)或函数返回值:
function toAscii($str, $replace=array(), $delimiter='-') {
if( !empty($replace) ) {
# NOTE: no need to cast to array. It's either array or string, both work
$str = str_replace($replace, ' ', $str);
}
# NOTE: inconv will return FALSE on error. Checking this now.
$result = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
if (FALSE === $result) {
throw new Exception(sprintf('Iconv failed on "%s".', $str));
} else {
$clean = $result;
}
$clean = preg_replace("/[^a-zA-Z0-9'/_|+ -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/['/_|+ -]+/", $delimiter, $clean);
return $clean;
}