首页 > 解决方案 > PHP:来自xml的希腊字符串转换为ascii并且没有比较

问题描述

wpallimport用来从 xml 中导入一些希腊语类别。我正在使用一些自定义函数,以便通过使用存储原始类别和目标类别的数据库表来进行一些类别映射。

例如:

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

问题是,当我尝试将 xml: 中的类别Κατηγορία α与数据库表中的类别进行比较时,Κατηγορία α即使它们看起来相同,但它们并不相同。我做到了strlen,我看到 xml 的字符串长度比看起来要大。通过进一步调查,我发现如果我从每个字符的 xml 中回显字符串,我会得到 ascii 代码。

所以echo $category_from_xml[0];返回&(来自希腊Κ字母的 ascii 表示:)&#x39aecho $category_from_database[0];返回Κ

如何正确比较这两个字符串?

示例 数据库包含这些值:(数据库排序规则 utf8_General_ci)

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

这是我要解析的 XML 的一部分:

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

最后这就是我尝试比较两个字符串的方式:

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”的值,当我逐字符回显它时:

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

标签: phpwordpressstringencodingwpallimport

解决方案


推荐阅读