检查PHP中的unicode

检查PHP中的unicode,php,unicode,character-encoding,Php,Unicode,Character Encoding,如何使用PHP检查字符是否为Unicode字符?您通常会执行以下操作: if (mb_strlen($ch) != strlen($ch)) ... 我应该补充一点:strlen计算字节数,而mb_strlen计算字符数(正确处理多字节字符,我想这才是您真正谈论的,而不是unicode-因为unicode还包括100多个与ASCII无法区分的单字节字符)您可以尝试使用 mb_check_encoding($s,"UTF-8") 无论字符的值是什么,或者是多字节unicode字符的一部分,uni

如何使用PHP检查字符是否为Unicode字符?

您通常会执行以下操作:

if (mb_strlen($ch) != strlen($ch)) ...
我应该补充一点:strlen计算字节数,而mb_strlen计算字符数(正确处理多字节字符,我想这才是您真正谈论的,而不是unicode-因为unicode还包括100多个与ASCII无法区分的单字节字符)

您可以尝试使用

mb_check_encoding($s,"UTF-8")

无论字符的值是什么,或者是多字节unicode字符的一部分,unicode字符总是具有最高有效字节集。您不能只检查字符串的字节数是否大于字符数,因为某些unicode字符只有一个字节。如果字符串字节值中的任何字符大于127,则该字符串包含unicode。

实际上,您甚至不需要mb_字符串扩展名:

if (strlen($string) != strlen(utf8_decode($string)))
{
    echo 'is unicode';
}
以及查找给定字符的代码点:

$ord = unpack('N', mb_convert_encoding($string, 'UCS-4BE', 'UTF-8'));

echo $ord[1];

谢谢各位。。最后我得到了我想要的答案

从中获取包含文件

以下代码解决了我的问题:

<?php
  require_once("utf8.inc");
  /*** create a unicode string ***/
  $s = "حملة إلا صلاتي";
  $out = utf8ToUnicode($s);
  for ($i=0;$i < strlen($s);$i++)
    echo dechex($out[$i]).".";
?>

PHP中的字符串是ByTestStream,而不是字符流。在PHP中实际上不能有unicode字符串;您需要对字符进行编码。如果您想覆盖整个unicode范围,UTF-8是最明显的选择

如果您想获取由TestStream编码的utf-8的代码点,可以使用以下库:


然而,我想知道你到底需要这个做什么?最有可能的是,您可以通过简单地使用utf-8来解决所有问题。

您可能需要澄清在这种情况下使用Unicode的确切含义。我怀疑您会遇到未使用Unicode定义的字符,因此您的检查可能会在任何情况下返回
true
。我想获取Unicode字符的代码点。如何做到这一点。@Rössel:我相信他想知道字符串是否包含ASCII以外的字符。嗨,searlea,谢谢你的快速响应!这正是我想要的。我检查了这个,得到的结果如下,它给出的结果是15非unicode。有什么问题吗?这段代码似乎有效!!。。如果你能帮我找到一个函数来获取unicode字符的代码点,那会很有帮助吗?让$s成为“somestring”,如果(mb_check_encoding($s,UTF-8)),那么{字符串是unicode}或者{它不是unicode}嗨,伙计们。。我的简单要求是找到字节流的代码点,我从!!谢谢!!我还是不知道你一开始解决的问题是什么。我很确定你是在为自己挖一个洞。它与我的阿拉伯语unicode完美结合,可以确定RTL,谢谢:)PHP7.2为找到代码点而添加。