Domanda

Ci sono soluzioni in grado di convertire tutti i caratteri stranieri di A-Z equivalenti? Ho cercato molto su Google e non sono riuscito a trovare una soluzione o anche un elenco di caratteri ed equivalenti. Il motivo è che voglio visualizzare A-Z solo gli URL, oltre a un sacco di altri alti viaggio quando si tratta di questi personaggi.

È stato utile?

Soluzione

È possibile utilizzare iconv , che ha una codifica speciale traslitterazione.

  

Quando la stringa "// Translit" viene aggiunto tocode, traslitterazione viene attivato. Ciò significa che quando un personaggio non può essere rappresentato nel set di caratteri di destinazione, può essere approssimata attraverso uno o più caratteri che sembrano simili al personaggio originale.

- http://www.gnu.org/ software / libiconv / documentazione / libiconv / iconv_open.3.html

Vedi qui per un esempio completo che corrisponde al tuo caso d'uso.

Altri suggerimenti

Se si sta usando iconv quindi assicurarsi che il locale sia impostato correttamente prima di provare la traslitterazione, altrimenti alcuni caratteri non saranno correttamente traslitterati

setlocale(LC_CTYPE, 'en_US.UTF8');

Questo convertirà il più possibile i caratteri stranieri (tra cui cirillico, cinese, arabo, ecc) ai loro A-Z equivalenti:

$AzString = transliterator_transliterate('Any-Latin;Latin-ASCII;', $foreignString);

Si potrebbe voler installare PHP Intl estensione prima.

Se si è bloccato con uno sviluppo e rilascia ambiente che non supporta PHP 5.4 o più recente, si dovrebbe usare sia iconv o una libreria di traslitterazione personalizzato.

In caso di iconv, lo trovo estremamente scortese soprattutto usarlo su alfabeti arabi o cirillici. Vorrei andare per un PHP 5.4 classe di traslitterazione incorporato o una classe traslitterazione personalizzato.

Una delle soluzioni postato parlato di un libreria personalizzata che non ho la prova.

Quando ero con Drupal, mi è piaciuto il loro traslitterazione modulo , che ho recentemente porting esso per renderlo utilizzabile senza Drupal.

è possibile scaricarlo qui e utilizzare nel modo seguente:

<?php

include "JTransliteration.php";

$mombojombotext = "誓曰:『時日害喪?予及女偕亡。』民欲與之偕亡,雖有";
$nonmombojombotex = JTransliteration::transliterate($mombojombotext);

echo $nonmombojombotex;

?>

Nota:. Sto reinserire questo da un altro domanda simile, nella speranza che sia utile agli altri

ho finito per scrivere una libreria PHP basato sulla URLify.js del progetto Django, dal momento che ho trovato iconv () per essere troppo incompleta. Lo si può trovare qui:

https://github.com/jbroadway/urlify

Maniglie caratteri latini e greco, turco, russo, ucraino, ceco, polacco e lettone.

<?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');
            }
        }
    }

}

per adepti compositore c'è slugify

https://github.com/cocur/slugify

use Cocur\Slugify\Slugify;
$slugify = new Slugify();
echo $slugify->slugify('Hello World!'); // hello-world

//You can also change the separator used by Slugify:
echo $slugify->slugify('Hello World!', '_'); // hello_world

//The library also contains Cocur\Slugify\SlugifyInterface. Use this interface whenever you need to type hint an instance of Slugify.
//To add additional transliteration rules you can use the addRule() method.
$slugify->addRule('i', 'ey');
echo $slugify->slugify('Hi'); // hey

Il problema con la query è che è una cosa molto difficile da fare. Non tutti i glifi nella maggior parte delle lingue hanno equivalenti az, tutti i glifi hanno equivalenti fonetici (ma queste sono le parole non le lettere), se sono solo a che fare con linguaggi basati latini allora le cose sono un po 'più facile, ma avete ancora problemi con le cose come I-mutazione .

Il tuo migliore soluzione di parola sia a venire con un elenco grezzo di suoni fonetici -.> A-z equivalenti, non sarà perfetto, ma senza più informazioni su di voi requisiti esatti è difficile sviluppare una soluzione

bella libreria disponibili all'indirizzo:

1) https://github.com/ashtokalo/php-translit (molti lingue, tuttavia, manca di alcune lingue)

2) https://github.com/fre5h/transliteration (solo per il russo e ucraino )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top