【问题标题】:How to pass the UTF-8 encoded strings between JS and PHP?如何在 JS 和 PHP 之间传递 UTF-8 编码的字符串?
【发布时间】:2014-04-29 20:48:32
【问题描述】:

序言:

我发现Javascript and PHP has different approach to UTF-8 multibyte character codes: - PHP 将多字节字符视为几个单独的字节; JS 将多字节字符视为单个整数(大于 255) - PHP 保留代码中的所有辅助位; JS 剥离了所有这些位。

所以俄罗斯字母“А”的代码将是

  • PHP 中的 208 和 144

    JS 中的 1040

问题描述

我需要在客户端浏览器的 JS 中将字符串公开给某个编码例程,然后在服务器端的 PHP 中解码。为了对字符串进行编码和解码,我使用了 JS 字符串属性 charCodeAt 和 PHP 函数 chr()。正如我上面提到的,这种方法不起作用,因为 PHP 和 JS 中的代码不同。

问题

PHP 中是否有任何函数可以从 UTF-8 字节序列中去除辅助位 Javascript 中是否有任何函数可以将这些辅助位添加到字符代码中?

【问题讨论】:

标签: javascript php utf-8 character-encoding


【解决方案1】:

使用 mb_* 函数,否则会拆分字节。每个字节用ord

<?php
    $the_char   = 'А';
    $byte_1     = $the_char[0];
    $byte_2     = $the_char[1];
    print (ord($byte_1) - 192) * 64 + (ord($byte_2) - 128);
?>

你可以用 Javascript 做同样的事情

【讨论】:

  • 我看到您实际上是在手动转换那些 UTF-8 辅助位。那么就没有比库或内在函数更好的方法了吗?
  • 是的,我找到了一个小 Git-Project。我认为这可以唤醒你的兴趣:github.com/fluxbb/utf8/blob/master/functions/ord.php 但它和我的 sn-p 一样
猜你喜欢
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 2014-06-09
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多