Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Обрезать текст от символа до символа php (https://javascript.ru/forum/server/72860-obrezat-tekst-ot-simvola-do-simvola-php.html)

eez54024 03.03.2018 11:09

Обрезать текст от символа до символа php
 
Привет всем, помогите пожалуйста, а то уже 2 день не могу реализовать задуманное.
Имеется начальная строка:
https://api.vk.com/blank.html#access_token=12345678900987654321&expires_in=0&user_id=123456789

Как из всего этого, выдернуть только то, что находится от тега access_token= и до тега &, чтобы получилось только это:
12345678900987654321

Nexus 03.03.2018 11:18

<?php
    $response='https://api.vk.com/blank.html#access_token=12345678900987654321&expires_in=0&user_id=123456789';
    $token=preg_replace('#.+access_token=([^&]+?)&.+#uim','$1',$response);
    echo $token, PHP_EOL;
    
    $token=explode('#',$response,2);
    $token=array_reduce(explode('&',end($token)),function($res,$item){
        $item=explode('=',$item);
        $res[reset($item)]=end($item);
        
        return $res;
    },array());
    $token=$token['access_token'];
    echo $token;
http://sandbox.onlinephpfunctions.co...b79f0460dc551f

eez54024 03.03.2018 11:31

Спасибо тебе, если я правильно понял, то здесь два способа?

Nexus 03.03.2018 12:29

eez54024, да, там 2 способа.

laimas 03.03.2018 13:17

Nexus, parse_str. )

Nexus 03.03.2018 13:28

laimas, я даже про эту функцию и не вспомнил)

<?php
    $response='https://api.vk.com/blank.html#access_token=12345678900987654321&expires_in=0&user_id=123456789';

    $token=explode('#',$response,2);
    parse_str(end($token),$token);
    $token=$token['access_token'];
    echo $token;

laimas 03.03.2018 13:36

Цитата:

Сообщение от Nexus
$token=explode('#',$response,2);

Значит и о parse_url тоже не помним. )

Nexus 03.03.2018 13:47

laimas, нет, просто не знал о её существовании)
parse_str(parse_url($response,PHP_URL_FRAGMENT),$token);

Удобно, конечно, но нафиг было её вообще добавлять, если получить её результат совсем просто...
Этот же вопрос можно задать для множества других функций языка.

laimas 03.03.2018 14:04

Цитата:

Сообщение от Nexus
но нафиг было её вообще добавлять, если получить её результат совсем просто

Ну если охота самому разбирать, пожалуйста. Но данная функция не просто ковыряется, а пытается сделать максимум корректно, возвращая результат соответствующий. А вы пишите код не делая проверок.

Atheist 10.03.2018 03:20

Лучше всего и экономнее (процессорное время) регуляркой
$token=preg_replace("#^.*access_token=([^&]+?)&.*#i","$1",$response);


Часовой пояс GMT +3, время: 14:00.