Pergunta

Eu tenho um banco de dados MySQL com títulos de livros em Inglês e Árabe e eu estou usando um PHP classe que pode transcrever automaticamente o texto árabe para o alfabeto latino.

Eu gostaria de minha saída HTML para algo parecido com isto:

<h3>A book</h3>
<h3>كتاب <em>(kitaab)</em></h3>
<h3>Another book</h3>

Existe uma maneira de PHP para determinar o idioma de uma corda com base nos caracteres Unicode e glifos usados ??nele? Eu estou tentando obter algo como isto:

$Ar = new Arabic('EnTransliteration');
while ($item = mysql_fetch_array($results)) {
    ...
    if (some test to see if $item['item_title'] has Arabic glyphs in it) {
      echo "<h3>$item[item_title] <em>(" . $Ar->ar2en($item['item_title']) . ")</em></h3>";
    } else {
      echo "<h3>$item[item_title]</h3>";
    }
    ...
}

Felizmente, a classe não engasgar quando alimentados com caracteres latinos, por isso, em teoria, eu poderia enviar todos os resultados através da transformação, mas que parece ser um desperdício de processamento.

Obrigado!

Editar: Eu ainda não encontrei uma maneira de verificar se há glifos ou caracteres. Acho que eu poderia colocar todos os caracteres árabes em uma matriz e verificar se alguma coisa na matriz corresponde a uma parte da string ...

Eu fiz, no entanto, descobrir uma solução provisória que funcionam bem poder no final. Ele coloca cada título através da transformação, independentemente da linguagem, mas apenas emite o transliteração entre parênteses se a string foi alterado:

while ($item = mysql_fetch_array($mysql_results)) {
    $transliterate = trim(strtolower($Ar->ar2en($item['item_title'])));
    $item_title = (strtolower($item['item_title']) == $transliterate) ? $item['item_title'] : $item['item_title'] . " <em>($transliterate)</em>";

    echo "<h3>$item_title</h3>";
}
Foi útil?

Solução

Isso deve fazê-lo:

preg_match("/\p{Arabic}/u", $item['item_title'])

Você poderia fazer essa expressão regular um pouco mais sofisticado, se você quiser, mas eu não acho que você realmente precisa.

O \p fuga seqüência permite selecionar caracteres com base em suas propriedades Unicode (quando o u padrão modificador é usado).

O manual do PHP menciona: "estendido propriedades como 'grego' ou 'InMusicalSymbols' não são suportadas por PCRE." Mas isso não é inteiramente verdade anymore. PCRE liberar 6.5 adicionado suporte para nomes de script .

Outras dicas

Aqui está uma classe de código aberto PHP para detecção automática conjunto de caracteres árabe:

http://www.ar-php.com/php /arabic/index.html#ArCharsetD

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top