2016-12-28 19 views
0

なぜord PHPの結果はcharCodeAt javascriptの結果と同じではありませんか? PHPからord PHPの結果がcharCodeAt javascriptの結果と異なるのはなぜですか?

結果は230 143 144

あるとJavaScriptから生じるjavascriptの結果と同じように、結果を取得するPHPコードを適用する方法25552

のですか?

javascriptの

<script> 
var someString = "提"; 

for(var i=0;i<someString.length;i++) { 
    var char = someString.charCodeAt(i); 
    alert(char); 
} 
</script> 

PHP

<?php 
$s = '提'; 

for ($i = 0; $i < strlen($s); $i++) { 
    print ord($s[ $i ]) . "\n"; 
} 
?> 
+2

重複します:http://stackoverflow.com/questions/10333098/utf-8-safe-equivelant-of-ord-or- charcodeat-in-php – Hereblur

+0

なぜうまくいかない? '<?php $ s = '提出'; ($ i = 0; $ i ' –

答えて

0

コンピュータでテキストをエンコードする百種類の方法のようにありますので。さらに:

  • PHPが本当にあなたのあなたのデータをコードする
  • を使用していること(これは、この特定の場合には関係ありませんが)JavaScriptは本当に最近のバージョンまで正しくUnicodeを実装していませんでした

を知りません文字(提)は'hold in hand; lift in hand' (U+63D0)としてUnicodeカタログに記載されているとあり、他の多くの間、以下のエンコードされた::UTF-8 AS

  • UTF-16 AS
  • 0x63D0(10進数25552

あなたのPHPファイルはUTF-8として保存されるように表示されます(それはあなたがあなたのテキストエディタで確認することができるものです)ので、提は3バイトでエンコードされていますあなたのコードは個々のバイトを1文字に分割します。

ただし、JavaScriptの機能では、UTF-16エンコーディングがdocumentedとして出力されます。

PHPは、エンコーディング間の変換に組み込み関数のカップルを提供します。

$as_utf8 = '提'; 
var_dump(unpack('n', mb_convert_encoding($as_utf8, 'UTF-16BE', 'UTF-8'))); 
var_dump(unpack('n', iconv('UTF-8', 'UTF-16BE', $as_utf8))); 
関連する問題