Это кажется несколько уместным . Для упрощения существует несколько способов получить один и тот же текст в Unicode (и, следовательно, UTF8): например, это: ř
можно записать как один символ ř
или как два символа: r
и объединяющий ˇ
.
Лучшей ставкой будет * нормализатор класса 1012 * - нормализуйте обе строки в одной и той же форме нормализации и сравните результаты.
В одном из комментариев вы показываете эти шестнадцатеричные представления строк:
4d696e61205469646967617265 20 616e7374 c3a4 6c6c6e696e676172 // from XML
4d696e61205469646967617265 c2a0 616e7374 61cc88 6c6c6e696e676172 // typed
^^-----------------^^^^1 ^^^^^^2
Обратите внимание на части, которые я отметил, по-видимому, есть две части этой проблемы.
Во-первых, соблюдайте этот вопрос о значении последовательности байтов "c2a0" - по какой-то причине ваша типография переводится в неразрывное пространство, где XML-файл имеет нормальный пространство. Обратите внимание, что в обоих случаях после "Мины" есть нормальное место. Не уверен, что делать с , что в PHP, за исключением того, чтобы заменить все пробелы нормальным пробелом.
Что касается второго, то это тот случай, который я обрисовал выше: c3a4
- это ä
(U + 00E4 "МАЛЕНЬКОЕ ПИСЬМО А С ДИАРЕЗОМ" - один символ, два байта ), тогда как 61
- это a
(U + 0061 "LATIN SMALL LETTER A" - один символ, один байт), а cc88
будет умножением объединения "
(U + 0308 «ДИАРЕЗ КОМБИНИРОВАНИЯ» - два символа, три байта). Здесь должна быть полезна библиотека нормализации .