strtolower ($ а) == strtolower ($ б)! = матч? - PullRequest
0 голосов
/ 08 февраля 2011

ОК, у меня есть функция, которая сравнивает значения и возвращает результаты, независимо от регистра, то есть: Передача межфазного взаимодействия = Передача межфазного обмена здесь есть функция:

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. &lt;Nature of Call&gt;</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), а второе - из БД (?). Я понятия не имею, что делать, и я невероятно разочарован, поскольку это простая задача. Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Распечатывает байты expval и actval (например, с urlencode). Есть много разных символов, которые выглядят одинаково (например, обычный пробел и неразрывный пробел, или c , es и roman 100 ) .

0 голосов
/ 08 февраля 2011

Есть ли в ваших строках завершающий пробел? Возможно, если вложить trim() вместе с strtolower(), это прояснится? Если вы посмотрите на это в выводе HTML, взгляните на источник и убедитесь, что в нем нет сущности HTML, которая его испортила (т. Е. «Передача между интерфейсами» и «передача через интерфейс» не совпадают, но может выглядеть то же самое в HTML).

Последний вариант - «обновить» до mb_strtolower и посмотреть, не является ли это проблемой кодирования.

...