Este destul de dificil să spunem ce versiune a CNC este cea mai optimă pentru motoarele de căutare și cât de mult aceasta afectează relevanța. În cadrul acestui articol, am decis să omitem această problemă și să vă oferim o funcție php gata pentru traducerea chirilică (rusă) în translit. pe care o folosesc în proiectele mele.
Nuanțele traducerii în transliterare
Dar, înainte de a trimite codul php al funcției în sine, trebuie să specificăm câteva puncte. Pentru început, varianta sugerată se bazează pe utilizarea matricei de traducere cu funcția strtr (). Astfel, problema codificării este parțial rezolvată, dar setul de litere chirilice (rusești) depinde de codificarea fișierului în care va fi localizată funcția.
Următorul moment este legat de funcția trecută de un șir. Acest șir poate fi format din caractere diferite, conține cod HTML și spații repetate etc. Evident, pentru a converti la un CNC complet, va trebui să efectuați filtrarea suplimentară a liniei și să înlocuiți spațiile cu același semn minus (-).
Funcția PHP translit ()
Toate cele de mai sus, cel puțin într-o formă simplificată, sunt implementate în funcția de traducere pe care o folosesc, aici este codul php:
funcția translit ($ s) $ s = (șir) $ s; // convertiți la valoarea șirului
$ s = bare de ieșire ($ s); // eliminați etichetele HTML
$ s = str_replace (array ("\ n", "\ r"), "", $ s); // scoateți căruciorul
$ s = preg_replace ("/ \ s + /", '', $ s); // eliminați spațiile duplicat
$ s = trim ($ s); // eliminați spațiile la începutul și la sfârșitul liniei
$ s = function_exists ('mb_strtolower'). mb_strtolower ($ s). strtolower ($ s); // traduceți șirul în litere mici (câteodată trebuie să specificați o locație)
$ s = strtr ($ s, array ('a' => 'a', 'b' => 'b', ' > '', 'e' => 'e', 'e' => 'e', ' 'y' => 'y', 'k' => 'k', 'l' => 'l', 'm' 'o', 'n' => 'p', 'p' => 'r', ' ',' '' '' 'h', 'c' => 'c', 'h' 'y', 'i' => 'ya', 'i' => 'y', ' => "));
$ s = preg_replace ("/ [^ 0-9a-z-_] / i", "", $ s); // ștergeți șirul de caractere nevalide
$ s = str_replace ("", "-", $ s); // înlocuiți spațiile cu un semn minus
returnați $ s; // returnați rezultatul
>
Pe scurt despre transliterație
Procesul de transliterare are multe caracteristici. În articolul meu, am locuit la traducerea chirilică în translit, adică Textul rusesc scris cu litere latine. Versiunea propusă a funcției php este ascuțită pentru crearea unui CNC, care este în mod normal perceput de motoarele de căutare Google și Yandex. În principiu, folosesc translit () ca una dintre funcțiile unui set de filtre, ceea ce face posibilă automatizarea procesării datelor, însă aceasta este o poveste complet diferită.
Ei bine, și tk. am vorbit despre CNC, ar trebui să spunem și despre traducerea completă. Evident, punerea în aplicare a acestei opțiuni pe cont propriu nu va fi simplă, ceea ce înseamnă că va fi mai adecvată utilizarea unui serviciu terță parte, de exemplu, traducătorul Google. Dacă acest subiect este de interes pentru dvs., vă recomandăm să vă familiarizați cu funcția mea PHP de translație multilingvă gtranslate ().
Pe asta am totul. Vă mulțumesc pentru atenție. Mult noroc!
După părerea mea, aceasta este o transcriere foarte neterminată, va fi dificil să o aplici undeva în practică. Cuvântul "obiectiv" va avea "obektiv", fără a indica înlăturarea literei "b". Translitorii normali fac "ob'ektiv" sau "obiectiv"
@ plutov.by: exemplul rezultat al transliterației este motivat în cadrul CNC, iar în acesta caracterul unic de cotație nu este permis sau, mai degrabă, va cauza probleme suplimentare.
Apoi îmi iau cuvintele înapoi, mi-a lipsit CNC, totul este luni!
@ plutov.by: nu, în principiu, este logic, dar este imposibil să țineți cont de toate opțiunile, iar translitul este de obicei utilizat sub CNC. -)
Șirul
$ s = preg_replace ("/ \ s + /", '', $ s); // eliminați spațiile duplicat
ar trebui să fie pus după
$ s = preg_replace ("/ [^ 0-9a-z-_] / i", "", $ s); // ștergeți șirul de caractere nevalide
deoarece după eliminarea simbolurilor inacceptabile există dublu, triplu, etc. spațiu gol
dar, în general, sa dovedit o funcție bună, spălând diferite gunoiuri și făcând totul frumos! ;-)
Mulțumesc foarte mult. o parte din codul dvs. ma ajutat foarte mult.
Și cum să obțineți rezultatul rezultatului variabil $ sau ceva de genul asta?
2Oleg astfel că funcția returnează o valoare, adică poate fi atribuită unei variabile:
$ result = translit ("funcție de traducere în translit");
sau afișați:
echo translit ("funcția de traducere în translit");
Mulțumesc pentru ajutor
Pentru a evita specificarea unei locale pentru strtolower ($ s), puteți adăuga potriviri pentru majuscule în matrice () și apoi le puteți traduce în litere mici
2Alexey Este posibil, dar acest lucru va crește semnificativ dimensiunea matricei.
Și pot introduce această funcție în formularul pentru a putea fi adăugat la șir cu translit?
Am făcut asta pentru CMSocurile mele, pe care CNC-urile le generează.
Aș adăuga, de asemenea, 'UTF-8' la șirul mb_strtolower ($ s, 'UTF-8'). strtolower ($ s, 'UTF-8');
Mulțumesc. Funcție excelentă. Ajutor!
Este totuși necesar să înlocuiți "/" cu "-"
$ s = preg_replace ("/ \ /", '-', $ s); // înlocuiți "/" cu "-"
Dumnezeu să vă binecuvânteze. Aproape am petrecut mult timp.