すべての外国語の文字を Az に相当するものに変換するソリューションはありますか? 私はGoogleで広範囲に検索しましたが、解決策や文字と同等のリストさえ見つけることができませんでした. その理由は、Az のみの URL を表示したいだけでなく、これらの文字を扱うときに他の多くのつまずきを表示したいからです。
10 に答える
特別な音訳エンコーディングを持つiconvを使用できます。
文字列「//TRANSLIT」が tocode に追加されると、音訳が有効になります。これは、文字がターゲット文字セットで表現できない場合、元の文字に似た 1 つまたは複数の文字で近似できることを意味します。
-- http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html
ユースケースに一致する完全な例については、こちらを参照してください。
iconv を使用している場合は、音訳を試す前にロケールが正しく設定されていることを確認してください。そうしないと、一部の文字が正しく音訳されません。
setlocale(LC_CTYPE, 'en_US.UTF8');
PHP 5.4 以降をサポートしていない開発およびリリース環境に行き詰まっている場合は、iconvまたはカスタムの文字変換ライブラリを使用する必要があります。
iconv の場合、特にアラビア語やキリル文字で使用すると、非常に役に立たないことがわかりました。PHP 5.4 組み込みの Transliteration クラスまたはカスタムの Transliteration クラスを使用します。
投稿されたソリューションの 1 つに、私がテストしていないカスタム ライブラリが記載されていました。
Drupal を使用していたとき、私は彼らの文字変換モジュールが大好きでした。最近、Drupal なしで使用できるように移植しました。
ここからダウンロードして、次のように使用できます。
<?php
include "JTransliteration.php";
$mombojombotext = "誓曰:『時日害喪?予及女偕亡。』民欲與之偕亡,雖有";
$nonmombojombotex = JTransliteration::transliterate($mombojombotext);
echo $nonmombojombotex;
?>
注:他の人に役立つことを願って、別の同様の質問からこれを再投稿しています。
iconv()が不完全であることがわかったため、DjangoプロジェクトのURLify.jsに基づいてPHPライブラリを作成することになりました。あなたはここでそれを見つけることができます:
https://github.com/jbroadway/urlify
ラテン文字だけでなく、ギリシャ語、トルコ語、ロシア語、ウクライナ語、チェコ語、ポーランド語、およびラトビア語も処理します。
<?php
/**
* @author bulforce[]gmail.com # 2011
* Simple class to attempt transliteration of bulgarian lating text into bulgarian cyrilic text
*/
// Usage:
// $text = "yagoda i yundola";
// $tl = new Transliterate();
// echo $tl->lat_to_cyr($text); //ягода и юндола
class Transliterate {
private $cyr_identical = array("а", "б", "в", "в", "г", "д", "е", "ж", "з", "и", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ъ", "я");
private $lat_identical = array("a", "b", "v", "w", "g", "d", "e", "j", "z", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "y", "q");
private $cyr_fricative = array("ж", "ч", "ш", "щ", "ц", "я", "ю", "я", "ю");
private $lat_fricative = array("zh", "ch", "sh", "sht", "ts", "ia", "iu", "ya", "yu");
public function __construct() {
$this->identical_to_upper();
$this->fricative_to_variants();
}
public function lat_to_cyr($str) {
for ($i = 0; $i < count($this->cyr_fricative); $i++) {
$c_cyr = $this->cyr_fricative[$i];
$c_lat = $this->lat_fricative[$i];
$str = str_replace($c_lat, $c_cyr, $str);
}
for ($i = 0; $i < count($this->cyr_identical); $i++) {
$c_cyr = $this->cyr_identical[$i];
$c_lat = $this->lat_identical[$i];
$str = str_replace($c_lat, $c_cyr, $str);
}
return $str;
}
private function identical_to_upper() {
foreach ($this->cyr_identical as $k => $v) {
$this->cyr_identical[] = mb_strtoupper($v, 'UTF-8');
}
foreach ($this->lat_identical as $k => $v) {
$this->lat_identical[] = mb_strtoupper($v, 'UTF-8');
}
}
private function fricative_to_variants() {
foreach ($this->lat_fricative as $k => $v) {
// This handles all chars to Upper
$this->lat_fricative[] = mb_strtoupper($v, 'UTF-8');
$this->cyr_fricative[] = mb_strtoupper($this->cyr_fricative[$k], 'UTF-8');
// This handles variants
// TODO: fix the 3 leter sounds
for ($i = 0; $i <= count($v); $i++) {
$v[$i] = mb_strtoupper($v[$i], 'UTF-8');
$this->lat_fricative[] = $v;
if ($i == 0) {
$this->cyr_fricative[] = mb_strtoupper($this->cyr_fricative[$k], 'UTF-8');
} else {
$this->cyr_fricative[] = $this->cyr_fricative[$k];
}
$v[$i] = mb_strtolower($v[$i], 'UTF-8');
}
}
}
}
クエリの問題は、それが非常に難しいことです。ほとんどの言語のすべてのグリフに az に相当するものがあるわけではなく、すべてのグリフに音声学的に相当するものがあります (ただし、これらは文字ではなく単語です)。ラテン語ベースの言語を扱っているだけの場合、物事は少し簡単になりますが、I 変異などの問題はまだあります。 .
あなたの最善の解決策は、表音の粗いリストを考え出すことです-> az同等物、それは完璧ではありませんが、正確な要件に関する情報がなければ、解決策を開発するのは困難です.