使用更高版本的PHP时代码中断
当我从PHP v5.2.17-->v5.3.5升级时,出现了以下代码,但我不知道它是什么。有人知道什么地方可能出了问题吗?谢谢使用更高版本的PHP时代码中断,php,forms,character-encoding,Php,Forms,Character Encoding,当我从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_replac
<?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;
}
?>
输出为:
输出为:
当我输出原始表单数据时,它工作得很好,当我输出
toAscii($goto)
数据时,它不会返回任何内容。您没有在问题中添加错误消息,但由于代码只使用一个非标准函数,即iconv
,很可能您没有安装/启用
要解决这个问题,请启用所需的扩展,代码应该按照您从其他PHP配置中了解的那样工作
如果扩展是可用的,并且是从我的头顶启用的(PHP5.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;
}
您收到了什么错误消息?您收到了有用的错误消息吗?另外,有趣的是,我在自己的PHP5.3应用程序中使用了这段代码。它很好用。也许你没有安装iconv扩展?嘿,不幸的是我没有收到任何错误。我在一个“跳转”页面上使用这段代码,该页面处理一个简单的表单,清理表单输入,使其对url友好,并将输出添加到它重定向到的另一个url。因此,应该发生什么,我将在第1页的表单中输入文本并提交表单,在第2页,上面的php代码将处理表单,去掉不好的字符,将结果放入url字符串中,将我重定向到第3页。不幸的是,我有相当轻量级的php技能,我不知道如何安装iconv扩展来尝试你的建议。我使用的是MAMP服务器(基本上是Mac上的LAMP)。我该如何添加这个扩展名呢?首先检查它是否已经可用:创建一个带有代码
的.php文件,您会遇到什么样的错误?只有一个白色的页面,一点错误都没有?hakre-没有错误,只需跳回到提交表单的第一页。这可能是我的CMS的一个功能。听起来你已经安装了iconv。你能检查一下你的PHP错误日志吗?或者您的CMS使用的任何日志?