将数据发送到 php 脚本并通过 android 保存在 mysql 表中时,加上符号更改为空格

Posted

技术标签:

【中文标题】将数据发送到 php 脚本并通过 android 保存在 mysql 表中时,加上符号更改为空格【英文标题】:plus symbol changes to space when sending data to a php acript and saving in mysql table through android 【发布时间】:2016-01-03 01:24:15 【问题描述】:

我正在尝试发送一个转换为字符串的数组列表,然后通过 POST 请求将数据保存在 mysql 表中,然后将其 urlencoded 到 php 脚本中。一切都很好,只是数据库中的“+”符号被替换为“”(空格)。

这是我用来发送 POST 请求的 android 中的 javacode

ContactNumbers 是一个包含 phonemunbers 的 ArrayList

ContactNumbers.toString()[+919401557473, +919085425753, +919435448667, +9954263031]

            param = "param="+ContactNumbers.toString(),;

            try 
                String yourURL = "http://54.169.88.65/events/eventmain/get_users2.php";
                URL url = new URL(yourURL);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setRequestMethod("POST");
                connection.setFixedLengthStreamingMode(param.getBytes().length);
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                OutputStream out = new BufferedOutputStream(connection.getOutputStream());
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
                writer.write(param);
                writer.flush();
                writer.close();
                out.close();
                connection.connect();

我使用的php脚本get_users2.php如下:

<?php

$r = $_POST['param'];
mysql_connect("localhost","root","magento");
mysql_select_db("Eventmain");
$sql = "INSERT INTO `data`(`data`) VALUES ('$r')";
mysql_query($sql);

?> 

mysql中data表如下:

CREATE TABLE IF NOT EXISTS `data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

data 列的 Collation 等于 utf8_general_ci

请帮忙。

【问题讨论】:

Juz 看看你的 php 代码... 将 VALUES ('$r')"; 替换为 VALUES ($r)"; juz 检查 $r 引号的差异。 @Rishad Appat 如果我这样做,数据库中不会插入任何内容。可能是sql异常。 【参考方案1】:

事实上,您是 Android 端的 URLEncoding 参数,然后使用您的 PHP 脚本对它们进行 URLDecoding。

很遗憾,“+”的 URL 解码是一个空格。

您可以尝试使用不受 URL 编码/解码影响的另一个字符来更改您的 Android 应用程序上的“+”字符,然后在 PHP 端,您可以在 URL 解码后将该字符替换为“+”。

【讨论】:

我已经编辑了我的代码,请再次检查一下,我已经从客户端和服务器端删除了编码部分,但 mysql 表中的“+”符号仍然变为“”(空格)。请回复。 你应该调试。在发送之前打印出参数,然后在从 $POST 变量中获取它们之后打印出它们。 '+' 已经不见了吗?因为,对我来说,这似乎是一个 URL 编码/解码问题。您可以查看的另一件事是这些“参数”是否放在 URL 本身中(以 GET 方式),或者它们是否真的放在 POST 正文中。如果它们在 URL 中,则无论您刚刚删除的“手动”方法如何,它们都可能会被编码/解码。 我会在 Android 端进行替换,将每个参数中的“+”更改为您知道未使用的另一个字符,比如说“。” (点)。然后,在 PHP 方面,我会将它们替换回 '+'。 谢谢你,我替换了你说的字符,它工作正常。但我仍然无法弄清楚这个问题。 我不是 Android 和 PHP 方面的专家,所以我不能说。这可能是由于参数由于某种原因通过 URL 传递,因此它们在 PHP 端被解码。但我不确定。

以上是关于将数据发送到 php 脚本并通过 android 保存在 mysql 表中时,加上符号更改为空格的主要内容,如果未能解决你的问题,请参考以下文章

通过 PHP 脚本将数据从 Arduino 发送到数据库的问题

将数据从 HTML 页面发送到 PHP 脚本并在 PHP 中选取数据

如何在不刷新页面的情况下将数据从 Android 发送到 PHP 并显示

将 POST 数据从 Android 应用程序发送到 PHP MySQL

通过 PHP 检索 GET 变量,在同一脚本上发送到 SWF?

将数据从 Android 发送到 PHP 服务器