Как сравнить две строки без учета регистра и диакритики?

У меня две струны

Строка 1: «Себастьян».

Строка 2: «Себастьян»

Я хочу сравнить эти две строки, игнорируя символ é (акценты). Может кто знает эту логику?

заранее спасибо


person Srividhya    schedule 01.07.2014    source источник
comment
может тебе стоит заменить é на e   -  person 0riginal    schedule 01.07.2014
comment
Вот еще одна ссылка на тот же вопрос   -  person Tyler.z.yang    schedule 01.07.2014
comment
Вероятно, вам стоит взглянуть на stackoverflow.com/questions/3371697/ или stackoverflow.com/questions/3635511/   -  person Marcin Nabiałek    schedule 01.07.2014
comment
Извинения ... В связи с срочностью я был отправлен ..   -  person Srividhya    schedule 01.07.2014


Ответы (4)


Вычислите сходство между двумя строками с помощью функции Similar_text.

Перед синтаксическим анализом «é» с помощью:

<?php
function normalize($string) {
    $string = strtr($string, array('ő' => 'o', 'ű' => 'u', 'Ő' => 'O', 'Ű' => 'U'));
    $a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖŐØÙÚÛÜŰÝÞßàáâãäåæçèéêëìíîïðñòóôõöőøùúûűüýýþÿŔŕ';
    $b = 'AAAAAAACEEEEIIIIDNOOOOOOOUUUUUYbsaaaaaaaceeeeiiiidnooooooouuuuuyybyRr';
    $string = utf8_decode($string);   
    $string = strtr($string, utf8_decode($a), $b);
    return utf8_encode($string);
}
?>

См. Дополнительную информацию по адресу: http://bitprison.net/php_normalize_string_function#sthash.tMoMbaOG.dpuf

person A-312    schedule 01.07.2014

Используйте расширение PHP Normalizer или iconv, подробнее:

http://www.php.net/manual/en/class.normalizer.php
http://www.php.net/manual/en/function.iconv.php

<?php
$string = 'Sébastien';
echo Normalizer::normalize($string);
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);
?>
person ka_lin    schedule 01.07.2014
comment
Это решение 6-летней давности не сработало для меня: оно выводило Sébastien и S? Bastien, ни один из которых не равен sebastien - person Arnaud; 25.02.2021

Вы также можете использовать пакет behat / transliterator:

require_once 'vendor/autoload.php';

$stringWithoutAccent = 'acces';
$stringWithAccent = 'accès';

// true
var_dump($stringWithoutAccent === \Behat\Transliterator\Transliterator::unaccent($stringWithAccent));
person Soullivaneuh    schedule 10.04.2017

Вы можете просто декодировать строки в utf8 и сравнить их.

В противном случае, если под игнорированием вы имели в виду вообще не сравнивать символ, тогда вам, возможно, придется выполнить сравнение по символам. Во-первых, переведите обе строки в верхний или нижний регистр, и где бы вы ни встретили символ, отличный от Unicode, пропустите сравнение и перейдите к сравнению следующего символа.

person Vivek Nanda    schedule 01.07.2014