PHP - публикация данных заканчивается, когда '&' находится в данных - PullRequest
1 голос
/ 14 апреля 2010

Я публикую данные с помощью jquery / ajax и PHP на серверной части. Проблема в том, что когда я вводил что-то вроде «Джек и Джилл пошли в гору», я получал «Джек» только тогда, когда он доходил до серверной части.

Я передал ошибку на внешнем интерфейсе перед отправкой этих данных, которая предупреждает: «Джек и Джилл пошли в гору».

Когда я помещаю die(print_r($_POST)); в самый верх моей индексной страницы, я получаю только [key] => Jack

Как я могу потерять данные?

Я думал, что это мог быть мой фильтр;

<?php

function filter( $data ) {
    $data = trim( htmlentities( strip_tags( mb_convert_encoding( $data, 'HTML-ENTITIES', "UTF-8") ) ) ); 
    if ( get_magic_quotes_gpc() ) { 
        $data = stripslashes( $data ); 
    } 
    //$data = mysql_real_escape_string( $data ); 
    return $data;
}

echo "<xmp>" . filter("you & me") . "</xmp>";

?>

, но в тесте выше you & me, который вернется после добавления die(print_r($_POST));.

, исправно.

Кто-нибудь может подумать, как и почему это происходит?

Любая помощь высоко ценится.

Ответы [ 4 ]

2 голосов
/ 14 апреля 2010

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

Используйте encodeURIComponent для этого

1 голос
/ 14 апреля 2010

Данные POST отправляются через заголовок HTTP в форме, которая аналогична данным GET в URL. Например, данные могут выглядеть как var1=value1&var2=value2&var3=value3. Как вы можете себе представить, если данные содержат сами амперсанды, они не будут работать слишком хорошо в этом формате. Если быть точным, проблема в том, как вы отправляете данные.

Чтобы использовать амперсанды в данных поста (или, в этом отношении, в URL), они должны быть "urlencoded", что означает, что вы должны использовать %26 для символа &. Итак, проблема не в самом PHP, а в том, что отправляет данные. Это неправильно кодирует значения.

0 голосов
/ 14 апреля 2010

В конце Javascript вы должны использовать escape().

В конце PHP функция называется urlencode().

0 голосов
/ 14 апреля 2010

Используйте кодировку () или escape () в конце JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...