特別なアクセント文字 (ă など) を文字列内の a-zA-Z 文字に変換する次の関数があります。
function tradu($sir){
$sir_aux = $sir;
$diacritice = array("ă"=>"a", "â"=>"a", "î"=>"i", "Î"=>"I", "ș"=>"s", "ş"=>"s", "ţ"=>"t", "ț"=>"t");
for($i=0; $i<strlen($sir_aux); $i++){
foreach($diacritice as $key=>$value){
if($sir_aux[$i]==$key)
$sir_aux[$i]=$value;
}
}
$sir_aux = strtr($sir, $diacritice);
return $sir_aux;
}
a が元の文字列で、a_translated が翻訳された文字列だとしましょう。
と を使用するstrpos(a, string_to_find)
とstrpos(a_translated, string_to_find)
、返される値が異なります。私もチェックstrlen(a)
しstrlen(a_translate)
ましたが、それらは異なる結果をもたらします。
なぜこうなった?
アクセント付きの文字列に特定の通常の文字列 (アクセントなし) が含まれているかどうかを検索する必要があるため、この説明が必要ですが、アクセントが含まれている場合でも、元の文字列から見つけた部分を返す必要があります。
私が試し
たこと 元の文字列を翻訳し、searched_string の開始位置を見つけてから、 I substr(ORIGINAL_STRING, position)
. ここで、位置が一致していないことに気付きました。
例: 元の文字列: Universitatea a fost înființată în 2001 pentru a oferi... 検索された文字列: infiintata 目的の結果: înființată în 2001 pentru a oferi...