Как я могу проверить, является ли символ символом Unicode или нет с PHP?
На самом деле вам даже не нужно расширение mb_string:
if (strlen($string) != strlen(utf8_decode($string))) { echo 'is unicode'; }
И найти кодовую точку данного символа:
$ord = unpack('N', mb_convert_encoding($string, 'UCS-4BE', 'UTF-8')); echo $ord[1];
вы можете попробовать
mb_check_encoding($s,"UTF-8")
ссылка
Обычно вы делаете что-то вроде:
if (mb_strlen($ch) != strlen($ch)) ...
Я должен добавить: strlen подсчитывает байты, в то время как mb_strlen подсчитывает символы (правильная обработка многобайтовых символов, что, я думаю, это то, о чем вы действительно говорите, а не unicode), поскольку unicode также охватывает более ста однобайтовых символов, неотличимых от ASCII)
Символ Юникода ВСЕГДА будет иметь самый старший байт, независимо от того, что это за значение или является частью многобайтового символа Юникода или что. Вы не можете просто проверить, имеет ли строка больше байтов, чем символов, поскольку некоторые символы Unicode имеют только один байт. Если какой-либо символ в байтовом значении строки больше 127, эта строка содержит unicode.
Спасибо, ребята. Наконец я получил ответ, который я искал.
Получил файл include из http://hsivonen.iki.fi/php-utf8/ .
Следующий код решил мою проблему:
<?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 – это потоки, а не потоки символов. На самом деле вы не можете иметь строки Unicode в PHP; Вам нужно кодировать символы с некоторой кодировкой. Если вы хотите охватить весь диапазон Unicode, UTF-8 является наиболее очевидным выбором.
Если вы хотите получить кодовую точку кодированного utf-8, вы можете использовать эту библиотеку: http://hsivonen.iki.fi/php-utf8/
Однако, интересно, для чего именно вам это нужно? Скорее всего, вы можете решить все свои проблемы, просто используя utf-8.