PHP: греческая строка из xml преобразована в ascii и не сравнивается - PullRequest
1 голос
/ 04 ноября 2019

Я использую wpallimport для импорта некоторых категорий из XML, которые на греческом языке. Я использую некоторые пользовательские функции для сопоставления категорий с помощью таблицы базы данных, в которой хранится исходная категория и категория назначения.

Например:

Κατηγορία α | Κατηγορία β

Проблема заключается вчто, когда я пытаюсь сравнить категорию из xml: Κατηγορία α с категорией в таблице базы данных Κατηγορία α, даже если они выглядят одинаково, это не так. Я сделал strlen и увидел, что длина строки XML больше, чем кажется. При дальнейшем изучении я обнаружил, что если я получаю эхо-строку из xml на символ, я получаю код ascii.

Итак echo $category_from_xml[0]; возвращает & (из представления ascii греческого Κ письма: &#x39a)в то время как echo $category_from_database[0]; возвращает Κ.

Как мне правильно сравнить эти 2 строки?

Пример База данных содержит следующие значения: (Сравнение базы данных utf8_General_ci)

origin_cat_desc          | target_cat_desc
---------------------------------------------------
Κινητά Τηλέφωνα > Maxcom | Κινητά & Tablet > Maxcom

И вот часть XML, которую я пытаюсь проанализировать:

<family el="Κινητά Τηλέφωνα" en="Mobile Phones"/>
<group el="Maxcom" en="Maxcom"/>

И, наконец, вот как я попытался сравнить 2 строки:

1

$path = {family}.' > '.{group};
function customCompare($fromDatabase,$path){
    return ($fromDatabase == $path); //strcmp fails too
}

2

$path = {family}.' > '.{group};
function customCompare($fromDatabase,$path){
    $stringToHex = json_encode($fromDatabase);
    $strTest = str_replace('\u0', '&#x', $stringToHex);
    $strTest = str_replace(' ', '', $strTest);
    $path='"'.$path.'"';
    $path = str_replace(' ','',$path);
    $removeSemicolon = str_replace(';','',htmlspecialchars($path, ENT_QUOTES));
    $k = htmlspecialchars($strTest, ENT_QUOTES);
    if($k==$removeSemicolon){
         echo "same";
    }
}

Это значение "Κινητά Τηλέφωνα> Maxcom "из базы данных, когда я повторяю это char за символ:

"&#x39a&#x3b9&#x3bd&#x3b7&#x3c4&#x3ac &#x3a4&#x3b7&#x3bb&#x3ad&#x3c6&#x3c9&#x3bd&#x3b1 > Maxcom"
...