string (all) to html special characters

367
11 апреля 2017, 12:16

Добрый день, подскажите пожалуйста как мне c помощью php конвертировать строку в 10ю кодировку и по надобности обратно ?

я имею ввиду вот как сдесь http://easywebscripts.net/html/spec_char.php

понаходил функции только которые кавычки и угловые скобки преобразуют, а буквы латинские и русские - нет. Спасибо.

Answer 1

Первая функция uniord возвращает десятичный код unicode-символа, а функция str_split_unicode разбивает unicode-строку на массив символов.

Проходим циклом по символам и кодируем их в нужный формат. Получить обратно строку можно с помощью метода html_entity_decode.

<?php
function uniord($ch)
{
$n = ord($ch{0});
if ($n < 128) {
    return $n; // no conversion required 
}
if ($n < 192 || $n > 253) {
    return false; // bad first byte || out of range 
}
$arr = array(
    1 => 192, // byte position => range from 
    2 => 224,
    3 => 240,
    4 => 248,
    5 => 252
);
foreach ($arr as $key => $val) {
    if ($n >= $val) { // add byte to the 'char' array 
        $char[] = ord($ch{$key}) - 128;
        $range  = $val;
    } else {
        break; // save some e-trees 
    }
}
$retval = ($n - $range) * pow(64, sizeof($char));
foreach ($char as $key => $val) {
    $pow = sizeof($char) - ($key + 1); // invert key 
    $retval += $val * pow(64, $pow); // dark magic 
}
return $retval;
}
function str_split_unicode($str, $l = 0)
{
    if ($l > 0) {
        $ret = array();
        $len = mb_strlen($str, "UTF-8");
        for ($i = 0; $i < $len; $i += $l) {
            $ret[] = mb_substr($str, $i, $l, "UTF-8");
        }
        return $ret;
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}
$str = 'Привет, world!';
$new_str = '';
foreach (str_split_unicode($str) as $ch)
    $new_str .= '&#' . uniord($ch) . ';';
echo $new_str . "\n" . html_entity_decode($new_str);
?>

Вывод:

&#1055;&#1088;&#1080;&#1074;&#1077;&#1090;&#44;&#32;&#119;&#111;&#114;&#108;&#100;&#33;
Привет, world!

http://sandbox.onlinephpfunctions.com/code/6d34b1c6c2a09ac6269a51eee4857a47b545a38e

READ ALSO
Проблема с openssl на CentOS 7

Проблема с openssl на CentOS 7

На сервере потребовалось запустить для сайта https, всё сделал как нужно по документации (nginx), часть секции server:

319
как распознать на картинке цифры?

как распознать на картинке цифры?

Как определить координаты пикселей на которых изображены цифры?

345
yii2 slug behavior - неправильная транслитерация

yii2 slug behavior - неправильная транслитерация

Как изменить словари для транслитерации? У меня сейчас выходит, например pataa-zemcuzina, а нужно pjataja-zhemchuzhina?

330
Как запустить свой код? [требует правки]

Как запустить свой код? [требует правки]

Как запустить свой код? Я нигде не нашел такой клавиши, чего только не пробовалВидимо, я настолько плох в этом, что не могу понять

311