Как проверить, является ли символ символом Unicode или нет с PHP?
Проверьте unicode в PHP
Ответ 1
На самом деле вам даже не нужно расширение 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];
Ответ 2
вы можете попробовать с помощью
mb_check_encoding($s,"UTF-8")
Ответ 3
Обычно вы делаете что-то вроде:
if (mb_strlen($ch) != strlen($ch)) ...
Я должен добавить: strlen подсчитывает байты, в то время как mb_strlen подсчитывает символы (правильно обрабатывая многобайтные символы, что, я думаю, это то, о чем вы действительно говорите, а не unicode), поскольку unicode также охватывает более ста однобайтовых символов неразличимых из ASCII)
Ответ 4
Символ Юникода ВСЕГДА имеет самый старший байт, независимо от того, какое значение имеет символ или если он является частью многобайтового символа Юникода или что. Вы не можете просто проверить, имеет ли строка больше байтов, чем символов, поскольку некоторые символы Unicode имеют только один байт. Если какой-либо символ в байтовом значении строки больше 127, эта строка содержит unicode.
Ответ 5
Спасибо, ребята. Наконец я получил ответ, который я искал.
Получил файл 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]).".";
?>
Ответ 6
Строки в PHP - это потоки, а не потоки символов. На самом деле вы не можете иметь строки Unicode в PHP; Вам нужно кодировать символы с некоторой кодировкой. Если вы хотите охватить весь диапазон Unicode, UTF-8 является наиболее очевидным выбором.
Если вы хотите получить кодовую точку кодированного utf-8, вы можете использовать эту библиотеку: http://hsivonen.iki.fi/php-utf8/
Однако, интересно, для чего именно вам это нужно? Скорее всего, вы можете решить все свои проблемы, просто используя utf-8.