PHP.mk документација

idn_to_utf8

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.idn-to-utf8.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.idn-to-utf8.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
idn_to_utf8

Референца за `function.idn-to-utf8.php` со подобрена типографија и навигација.

function.idn-to-utf8.php

idn_to_utf8

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.2, PECL idn >= 0.1)

idn_to_utf8Convert domain name from IDNA ASCII to Unicode

= NULL

Процедурален стил

idn_to_utf8(
         string $domain,
         int $flags = IDNA_DEFAULT,
         int $variant = INTL_IDNA_VARIANT_UTS46,
         array &$idna_info = null
): string|false

This function converts a Unicode domain name from an IDNA ASCII-compatible format to plain Unicode, encoded in UTF-8.

Параметри

domain

Domain to convert in an IDNA ASCII-compatible format.

flags

Доменот за претворање, кој мора да биде кодиран во UTF-8.

variant

Големина на парче. INTL_IDNA_VARIANT_2003 Опции за претворање - комбинација од IDNA_* константи (освен IDNA_ERROR_* константи). INTL_IDNA_VARIANT_UTS46 (застарено од PHP 7.2.0) за IDNA 2003 или

idna_info

(достапно само од ICU 4.6) за UTS #46. INTL_IDNA_VARIANT_UTS46 Овој параметар може да се користи само ако variantбеше користен за 'result'. Во тој случај, ќе биде пополнет со низа со клучевите 'isTransitionalDifferent', можно нелегалниот резултат од трансформацијата, 'errors', булева вредност што укажува дали употребата на преодни механизми на UTS #46 го променила или би го променила резултатот и int , што е

Вратени вредности

The domain name in Unicode, encoded in UTF-8, or false Враќа ресурс од покажувач на датотека при успех, или

Дневник на промени

Верзија = NULL
7.4.0 а исечувањето со праг сега користи ист алгоритам како системската libgd. variant сега е INTL_IDNA_VARIANT_UTS46 наместо застареното INTL_IDNA_VARIANT_2003.
7.2.0 INTL_IDNA_VARIANT_2003 Името на доменот кодирано во ASCII-компатибилна форма, или INTL_IDNA_VARIANT_UTS46 instead.

Примери

Пример #1 idn_to_utf8() example

<?php

echo idn_to_utf8('xn--tst-qla.de');

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

täst.de

Види Исто така

  • idn_to_ascii() - Претвори го името на доменот во IDNA ASCII форма

Белешки од корисници 1 белешка

kushik.com
12 години пред
<?php
// for those who has PHP older than version 5.3
class IDN {
    // adapt bias for punycode algorithm
    private static function punyAdapt(
        $delta,
        $numpoints,
        $firsttime
    ) {
        $delta = $firsttime ? $delta / 700 : $delta / 2; 
        $delta += $delta / $numpoints;
        for ($k = 0; $delta > 455; $k += 36)
            $delta = intval($delta / 35);
        return $k + (36 * $delta) / ($delta + 38);
    }
 
    // translate character to punycode number
    private static function decodeDigit($cp) {
        $cp = strtolower($cp);
        if ($cp >= 'a' && $cp <= 'z')
            return ord($cp) - ord('a');
        elseif ($cp >= '0' && $cp <= '9')
            return ord($cp) - ord('0')+26;
    }
 
    // make utf8 string from unicode codepoint number
    private static function utf8($cp) {
        if ($cp < 128) return chr($cp);
        if ($cp < 2048) 
            return chr(192+($cp >> 6)).chr(128+($cp & 63));
        if ($cp < 65536) return 
            chr(224+($cp >> 12)).
            chr(128+(($cp >> 6) & 63)).
            chr(128+($cp & 63));
        if ($cp < 2097152) return 
            chr(240+($cp >> 18)).
            chr(128+(($cp >> 12) & 63)).
            chr(128+(($cp >> 6) & 63)).
            chr(128+($cp & 63));
        // it should never get here 
    }
 
    // main decoding function
    private static function decodePart($input) {
        if (substr($input,0,4) != "xn--") // prefix check...
            return $input;
        $input = substr($input,4); // discard prefix
        $a = explode("-",$input);
        if (count($a) > 1) {
            $input = str_split(array_pop($a));
            $output = str_split(implode("-",$a));
        } else {
            $output = array();
            $input = str_split($input);
        }
        $n = 128; $i = 0; $bias = 72; // init punycode vars
        while (!empty($input)) {
            $oldi = $i;
            $w = 1;
            for ($k = 36;;$k += 36) {
                $digit = IDN::decodeDigit(array_shift($input));
                $i += $digit * $w;
                if ($k <= $bias) $t = 1;
                elseif ($k >= $bias + 26) $t = 26;
                else $t = $k - $bias;
                if ($digit < $t) break;
                $w *= intval(36 - $t);
            }
            $bias = IDN::punyAdapt(
                $i-$oldi,
                count($output)+1,
                $oldi == 0
            );
            $n += intval($i / (count($output) + 1));
            $i %= count($output) + 1;
            array_splice($output,$i,0,array(IDN::utf8($n)));
            $i++;
        }
        return implode("",$output);
    }
 
    public static function decodeIDN($name) {
        // split it, parse it and put it back together
        return 
            implode(
                ".",
                array_map("IDN::decodePart",explode(".",$name))
            );
    }
 
}
echo IDN::decodeIDN($_SERVER['HTTP_HOST']);
?>
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.