2014-07-14 2 views
1

У меня есть закодированная строка (она слишком длинная, чтобы ее можно было разместить здесь). Когда я использую разные утилиты для декодирования строки (http://www.the-art-of-web.com/javascript/escape/), строка выглядит отлично после urldecode(). Однако, когда я фактически передаю строку через urldecode() в моем php-файле в моей тестовой среде, первые 100 или около того символов отсутствуют. Я не могу понять, почему. Я пробовал как urldecode, так и rawurldecode. Если вы хотите увидеть строку я пытаюсь обработать вы можете сделать запрос GET на этот адрес http://pacific-wave-7885.herokuapp.com/api/opencart строковое Я работаю с это «содержимое» значение объекта JSONЧасть строки отсутствует после urldecode() в php

Что я пытаюсь сделать:

Я хочу сделать php-файл, который вызывает вышеуказанный адрес api, получает содержимое из объекта JSON, декодирует строку и анализирует код.

вот что я пробовал:

function utf8_urldecode($str) { 
    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str)); 
    return html_entity_decode($str,null,'UTF-8');; 
}  

$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" 
) 
); 
$context = stream_context_create($opts); 

$file = file_get_contents('http://pacific-wave-7885.herokuapp.com/api/opencart', false, $context); 

$contents_decode = utf8_urldecode($file); 

echo $contents_decode; 

Вы можете видеть с этим кодом, что «содержимое» начинается с «language-> нагрузки („перевозка груза/USPS“)» и отсутствует первый 100 или так символов этой части строки.

Я также попытался это:

$ch = curl_init(); 


    curl_setopt($ch, CURLOPT_URL, "http://pacific-wave-7885.herokuapp.com/api/opencart"); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $output = curl_exec($ch); 

    $data = json_decode($output, true); 

    $contents = $data[0]['contents']; 

    $contents_decode = urldecode($contents); 

    echo $contents_decode; 

    curl_close($ch); 

Это также приводит к тому же результату - часть начала строки отсутствует.

Повторить: если вы захватили закодированную строку прямо из объекта JSON и используете онлайн-инструмент для декодирования, строка выглядит великолепно, но как только она передается через urldecode() в моем php-файле, первая часть строки отсутствует персонажи.

Если кто-то может видеть то, что мне не хватает, я был бы так благодарен.

Just fyi: Моя php-среда - это последняя версия XAMPP с php5, а объект JSON поступает с сервера NODE с помощью express.js.

Если у кого-то есть лучшее представление о том, как я могу передать PHP-код в виде строки с сервера Node на сервер PHP, а затем проанализировать его, я также буду открыт для этого.

ответ

1

Я собираюсь сделать два предположения:

  1. Это показывает вверх, начиная с language->load('shipping/usps');

  2. Вы читаете возвращенную строку в вашем браузере.

Хорошая новость заключается в том, что у вас не хватает персонажей! Браузер просто искажая теги -

<?php 
    class ModelShippingUsps extends Model { 
     public function getQuote($address) { 
      $this-> 

браузер пытается иметь смысл его - он не знает, что это PHP, он думает, что это HTML. Он видит < и думает «о, круто, начало HTML-тега."И тогда он видит ? и он просто пытается выяснить, какого рода некорректного тега это, а затем Престола -> и решает, что должен быть HTML комментарий, поэтому он разбирает его как:

<!--?php 
class ModelShippingUsps extends Model { 
    public function getQuote($address) { 
     $this---> 

Изменить echo $contents_decode; к echo "<textarea>" . $contents_decode . "</textarea>", и вы увидите полную строку.

+0

Спасибо Дэйв, я забыл отметить это правильно! – simonmoonlandings

1

Почему бы не просто вернуть данные (вместо PHP блока в содержимом) и ваш PHP класс на приемном конце декодирования JSON и завершить логику.

Если вы настаиваете на том, чтобы вернуть блок PHP ... это может быть проще просто верните ответ JSON от node/express и используйте json_decode, чтобы вывести его в массив. Играя с этим, единственный способ, которым я мог бы сделать ваш блок PHP JSON дружественным, заключался в том, чтобы убежать от него, а затем encodeURIComponent.

<?php 
$jsonString = '{ 
    "name":"usps.php", 
    "version":1, 
    "platform":"opencart", 
    "contents":"%253C%253Fphp%250Aclass%2520ModelShippingUsps%2520extends...57D%250A%2509%2509%257D%250A%250A%2509%2509return%2520%2524method_data%253B%250A%2509%257D%250A%257D%250A%253F%253E", 
    "_id":"53c40942bddf820200000007", 
    "__v":0 
} 
'; 

$jsonArr = json_decode($jsonString, true); 
var_dump(urldecode(urldecode($jsonArr["contents"]))); 

?> 
+0

Kurt Спасибо за ваш комментарий, совет об использовании encodeuricomponent просто спас меня! – simonmoonlandings

Смежные вопросы