Я использую wpallimport
для импорта некоторых категорий из XML, которые на греческом языке. Я использую некоторые пользовательские функции для сопоставления категорий с помощью таблицы базы данных, в которой хранится исходная категория и категория назначения.
Например:
Κατηγορία α | Κατηγορία β
Проблема заключается вчто, когда я пытаюсь сравнить категорию из xml: Κατηγορία α
с категорией в таблице базы данных Κατηγορία α
, даже если они выглядят одинаково, это не так. Я сделал strlen
и увидел, что длина строки XML больше, чем кажется. При дальнейшем изучении я обнаружил, что если я получаю эхо-строку из xml на символ, я получаю код ascii.
Итак echo $category_from_xml[0];
возвращает &
(из представления ascii греческого Κ
письма: Κ
)в то время как 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 за символ:
"Κινητά Τηλέφωνα > Maxcom"