jQuery сериализует неправильно сериализует URL - PullRequest
0 голосов
/ 06 июля 2011

У меня есть форма, которую я отправляю, и я использую .serialize, чтобы помочь мне собрать все данные из формы. Теперь я проверил в firebug то, что отправлено в POST, и я вижу красивую форматированную строку, такую ​​как пример

index.php?data=sth&data2=sth

но проблема в этом и в PHP - PHP выводит это так:

index.php?data=sth& a m p ;data2=sth

Видишь этот усилитель? Ну, это написано без пробелов, и это и закодированная (как я узнал в Google) версия &. Итак, что я должен сделать, чтобы правильно ввести этот URL в базу данных, а затем извлечь его и показать на сайте без этого & amp;

edit: если возможно, я бы хотел, чтобы строка с этим & была помещена в этом формате в БД. (так, со знаком &).

редактировать # 2: как я отправляю данные:

 var formData = $("#myForm :input[value]").serialize();
 $.ajax({
     type: 'POST',                    
     cache:false,
     url: '_ajax/updateGameInfo.php', 
     async: false,                     
     dataType: 'text',
     data: allData,
     success: function(jsonObj) { 
         if (jsonObj){                       
             $msg = 'Data sucessfully updated! Reloading page...';
             alert($msg);
         }
         else{
             $msg = 'Error with the update!';
             alert($msg);
         }   
     }
 });    

А вот и мое обновление GameInfo.php:

$gameRepos = new GameRepository();    

$game = $gameRepos->updateGame();
echo json_encode( $game );   

А если вам тоже нравится, вот моя функция updateGame из GameRepository:

public function updateGame()
{
    $cleanPost = array_map( array('GameRepository', 'cleanPostData'), $_POST);
    $attributes = array_keys($cleanPost);
    $values = array_values($cleanPost);      

    $table = $this->resolveTableName( $cleanPost["selectedTypeId"] );
    $id = $cleanPost["selectedGameId"];

    if ($this->openConnection())
    {                                                
        $pairs = "";
        foreach ($cleanPost as $attribute => $value){
            if ($attribute != "selectedGameId" && $attribute != "selectedTypeId"){

            if ($attribute == "url")
                $value = str_replace("amp;", "", $value);    

                $pairs .= $attribute . "='" . $value . "',";
            }    
        }

        $pairs = rtrim($pairs, ','); //remove last comma

        $query = "UPDATE $table SET $pairs WHERE id=$id;";

        $result = pg_query($query);
        if (!$result){
            mysql_error());
            return false;
        }                
        else 
            return true;
    }
    else
        return false;
}

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Если вы передаете URL как переменную POST, PHP собирается автоматически кодировать любые специальные символы.Итак, предполагая, что имя переменной POST url, вы захотите сделать это в вашем php-скрипте, прежде чем все остальное:

$_POST['page_url'] = htmlspecialchars_decode($_POST['page_url']);

Проблема не в jquery, а в php.При передаче строк json вы столкнетесь с подобными проблемами.

0 голосов
/ 06 июля 2011

Вы проверяли кодировку в заголовке html страницы? Попробуйте изменить это!

...