2012-03-21 9 views
1

私はPHPで入力文字列を取り、 "奇妙な"文字のリストをURLに適したものに変換する基本的な関数を書いています。関数の記述は問題ではなく、奇妙な文字列で文字列をどのようにintepretsするかです。例えばPHPの文字セットの問題

、今私はこの問題を持っている:

$string = "år"; 
echo $string[0]; // Output: � 
echo $string[1]; // Output: � 
echo $string[0] . $string[1]; // Output: å 
echo $string[2]; // Output: r 

だから基本的にそれは私のために問題が発生する2つの文字として文字「A」、解釈します。なぜなら、文字列の各文字を個別に見て、必要に応じて置き換えたいからです。

私はUTF8ですべてをエンコードしています。上で見たように、私の問題は2つの文字として奇妙な文字を扱うUTF8で何かをしなければならないことが分かります。

これを回避するにはどうすればよいですか? UTFエンコーディングは常ににつき文字の1つのバイトではなく、あなたがより多くのスペースを必要としてあなたの非ASCII文字は、実際にメモリの複数のバイトを取る伸びるので

$string = "år"; 
echo $string[0]; // Output: å 
echo $string[1]; // Output: r 
+0

なぜmb_substrを(使用しない)のためのメソッドを使用する必要がありますか? – Endijs

+2

チェクアウトhttp://php.net/manual/en/function.mb-substr.php –

+0

@Pekka私は誤解の質問 – safarov

答えて

1

:基本的に私はこれを達成したいです。そして文字列変数への配列のようなアクセスは文字ではなくそのバイトを返します。だから、実際にそれを得るために、あなたはその

echo mb_substr($string, 0,1);// Output: å 
echo mb_substr($string, 1,1);// Output: r 
2
$string = "år"; 

mb_internal_encoding('UTF-8'); 
echo mb_substr($string, 0, 1); // å 
echo mb_substr($string, 1, 1); // r 
+1

なぜこれがダウンリストされたのか分かりませんか?とにかく、それが正しいとわかる限り、+1 –

+0

@Pekka私は同意します。ボットとArtjomsの答えが私のために解決しましたが、Artjomが最初に答えを書いて以来、私は彼が受け入れた – Weblurk

関連する問題