0

どこから始めればいいのかわかりませんが、やりたいことは次のとおりです。

ユーザーには、いくつかの単語を入力する必要があるテキスト フィールドがあります。問題は、ページがさまざまな国の人々を使用し、「奇妙な」ラテン文字 (ž、Ä、Ü、đ、Ť、Á など) を入力することです。

ベースに保存する前に、それらをz、a、u、d、t、aに変換したい...このようなものを作成せずにこれを行う方法はありますか(カバーするには文字が多すぎると思います):

 $string = str_replace(array('Č','Ä','Á','đ'), array('C','A','A','d'), $string);

そして、はい、データベースに utf-8 を保存できることはわかっていますが、問題は、この文字列が後で SMS によって送信されることです。また、SMS プロトコルの性質上、これらの「特別な」文字は、通常の英語のアルファベットよりも多くのスペースをメッセージ内で使用します。文字(私は120文字に制限されており、メッセージに「Ä」を入れると、1文字以上かかります)。

4

2 に答える 2

1

まず、元の文字を utf-8 でデータベースに保存します。取得時にいつでもASCII文字に「変換」できます。これは良いことです。たとえば、将来 SMS が UTF-8 サポートを追加した場合 (またはユーザー データを別の用途に使用したい場合) に、元の文字がそのまま保持されるからです。

とはいえ、iconvこれを行うために使用できます:

iconv('utf-8', 'ascii//TRANSLIT', $input);  //where $input contains "weird" characters

このアプローチのいくつかの警告を含む詳細については、このスレッドを参照してください: PHP: ウムラウトを UTF-8 文字列で最も近い 7 ビット ASCII に置き換え

于 2013-08-09T21:34:08.547 に答える
1

アクセントや物事を文字に変換するため、近いですが完全ではありません。

http://www.php.net/manual/en/function.iconv.php

 echo iconv("ISO-8859-1", "ASCII//TRANSLIT", 'Martín');
 //output: Mart'in

 echo iconv("ISO-8859-1", "ASCII//TRANSLIT", "ÆÇÈÊÈÒÐÑÕ");
 //output: AEC`E^E`E`OD~N~O

使用する

 echo iconv('utf-8', 'ascii//TRANSLIT', 'Martín'); 
 //output: Mart

アクセント付き文字が UTF-8 でない場合は、特殊文字以降の文字列が切り捨てられます。

于 2013-08-09T21:35:54.067 に答える