【发布时间】:2011-06-23 00:47:22
【问题描述】:
好的,我有一个比较值并返回结果的函数,无论大小写,即:Interfacility Transfer = INTERFACILITY TRANSFER 这里是函数:
function fncResult ($expVal, $actVal)
{
$negNulls=array("-5","-10","-15","-20","-25");
if (!in_array($expVal, $negNulls))
{
if(strtolower($expVal)==strtolower($actVal))
{
echo "
<td class='match' title='The values match.'>Match</td>
</tr>";
}
else
{
echo "
<td class='notMatch' title='The values do not match.'>Not Match<br />No Match</td>
</tr>";
}
}
else
{
echo "
<td class='null' title='The value in the XML was a negative null.'>Negative Null</td>
</tr>";
}
}
它在大约 99% 的时间都有效,除非涉及到这个:
//--Type of service requested
echo "
<tr>
<td>E02_04</td>
<td>Type of Service Requested</td>
<td>36. <Nature of Call></td>
<td>$fldServReq</td>
<td>".fncGrabNemsis("E02_04",$fldServReq,$local)."</td>
<td>".fncIsSet($CZ_E02_04[1])."</td>";
fncResult(fncGrabNemsis("E02_04",$fldServReq,$local),fncIsSet($CZ_E02_04[1]));
虽然看起来比较复杂,其实也只是strtolower($expVal)==strtolower($actVal),比较。当我回显正在比较的值时,我得到:“设施间转移”和“设施间转移”和“不匹配”...... WTF?可能是因为第一个值来自 XML(UTF-8),而第二个值来自 DB(?)我不知道该怎么做,因为这是一项简单的任务,我感到非常沮丧。感谢您的帮助!
【问题讨论】:
-
你为什么不直接使用strcasecmp?
-
可能有空格。
var_dump并检查它们的长度是否相等,或者先在输入上尝试trim。 -
如果没有看到提供给它的数据,所有这些代码都是无用的。您很可能在字符编码方面遇到问题。
-
该用户可能遇到过类似问题:stackoverflow.com/questions/3636559/…。同样,这个:stackoverflow.com/questions/1089966/…。换句话说,同一个 Unicode 字符可以用不同的字节序列来表示。您可以发布字符串的 hex 转储吗?
标签: php mysql string compare match