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

idn_to_ascii

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

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

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

function.idn-to-ascii.php

idn_to_ascii

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

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

= NULL

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

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

Претвори име на домен во IDNA ASCII форма

Параметри

domain

Оваа функција го претвора името на домен во Unicode во формат IDNA ASCII-компатибилен со мали букви.

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 , што е

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

претставува битен сет на константите за грешки IDNA_ERROR_*. 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_ascii() example

<?php

echo idn_to_ascii('täst.de');

?>

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

xn--tst-qla.de

е застарено; користете

<?php

var_dump
(idn_to_ascii('Example.com'));

?>

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

string(11) "example.com"

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

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

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

Пример #2 Имињата на домените само со ASCII се претвораат само во мали букви
пред 13 години
The notes on this function are not very clear and a little misleading.

Firstly, <=5.3, you will need to make use of one of several scripts or classes available on the internet which might, or might not, require the installation of of the intl and idn PECL extensions ...and you will need to have !<4.0 in order to be able to install both.

Secondly, if you have >=5.4 you will not require the PECL extensions.

Third, use of utf8_encode() is not necessary.  In fact, it will potentially prevent idn_to_ascii() from working at all.

On my setup it was necessary to change the charset in the script meta tags to UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

...and to change charset_default in the php.ini file (/usr/local/lib/php.ini, whereis php.ini, find / -name php.ini):

default_charset = "UTF-8"

The above changes mean that idn_to_ascii() can now be used with that syntax (no need for utf8_encode()).  Previously, the function worked to convert some IDNs, but failed to convert Japanese and Cyrillic IDNs.  Further, no additional locales were enabled or added, and Apache's charset file was left unmodified.

It is also important to remember only to apply the function where required, eg:

idn_to_ascii(cåsino.com) // is wrong

...whereas...

iden_to_ascii(cåsino) // is right

...and also be aware of text editors that don't support UTF-8 encoding, or the $domain = 'cåsino' value will end up as $domain = '??????' ...and the function will fail.

I have found that Notepad++ easily and reliably handles UTF-8 encoding that works for this function using UTF-8 as the encoding option, not UTF-8 without BOM.
edible dot email at gmail dot com
пред 9 години
To convert IDN Domains with the IDNA2008 definition use following command.

idn_to_ascii('teßt.com',IDNA_NONTRANSITIONAL_TO_ASCII,INTL_IDNA_VARIANT_UTS46)

The result is then as expected

xn--tet-6ka.com
alexchexes на gmail точка ком
пред 2 години
idn_to_ascii and idn_to_utf8 functions don't properly handle full URLs (i.e. with schema and paths), so here's the helper functions which handles all URLs, including ones with path but without a scheme

<?php
/**
 * Converts URLS to punycode  
 * It doesn't url-encodes other parts
 * The initial code from snipp dor ru website, here is modified version that handles urls without scheme
 */
function punycode_encode($url)
{
    $no_scheme = false;
    if (!preg_match('/^.+?:\/\//', $url) && substr($url, 0, 2) !== '//') {
        $url = '//' . $url;
        $no_scheme = true;
    }

    $parts = parse_url($url);
 
    $out = '';
    if (!empty($parts['scheme']))   $out .= $parts['scheme'] . ':';
    if (!empty($parts['host']))     $out .= '//';
    if (!empty($parts['user']))     $out .= $parts['user'];
    if (!empty($parts['pass']))     $out .= ':' . $parts['pass'];
    if (!empty($parts['user']))     $out .= '@';
    if (!empty($parts['host']))     $out .= idn_to_ascii($parts['host']);
    if (!empty($parts['port']))     $out .= ':' . $parts['port'];
    if (!empty($parts['path']))     $out .= $parts['path'];
    if (!empty($parts['query']))    $out .= '?' . $parts['query'];
    if (!empty($parts['fragment'])) $out .= '#' . $parts['fragment'];

    if ($no_scheme) {
        $out = substr($out, 2);
    }
 
    return $out;
}

function punycode_decode($url)
{
    $no_scheme = false;
    if (!preg_match('/^.+?:\/\//', $url) && substr($url, 0, 2) !== '//') {
        $url = '//' . $url;
        $no_scheme = true;
    }

    $parts = parse_url($url);
    $out = '';
    if (!empty($parts['scheme']))   $out .= $parts['scheme'] . ':';
    if (!empty($parts['host']))     $out .= '//';
    if (!empty($parts['user']))     $out .= $parts['user'];
    if (!empty($parts['pass']))     $out .= ':' . $parts['pass'];
    if (!empty($parts['user']))     $out .= '@';
    if (!empty($parts['host']))     $out .= idn_to_utf8($parts['host']);
    if (!empty($parts['port']))     $out .= ':' . $parts['port'];
    if (!empty($parts['path']))     $out .= $parts['path'];
    if (!empty($parts['query']))    $out .= '?' . $parts['query'];
    if (!empty($parts['fragment'])) $out .= '#' . $parts['fragment'];
 
    if ($no_scheme) {
        $out = substr($out, 2);
    }
    
    return $out;
}
mschrieck at gmail dot com
пред 2 години
The documentation ist not clear what failure in the return section means. This should be substituted to something like this:

"Returns failure if the given string could not be converted".
Навигација

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

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

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

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

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

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

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