当我从PHP v5.2.17升级时,我有以下代码中断 - > v5.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)
数据时,它什么都不返回。
答案 0 :(得分:2)
您尚未在问题中添加错误消息,但由于代码仅使用一个非标准功能,即iconv
,因此您很可能未安装/启用iconv extension
要解决此问题,请启用所需的扩展,并且代码应该可以从其他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;
}