【问题标题】:Insert special Characters / PHP + MySql + Android插入特殊字符 / PHP + MySql + Android
【发布时间】:2014-11-17 09:48:42
【问题描述】:

这个问题已经被问过很多次了,但没有一个建议的解决方案对我有用:(

我需要使用 Android 通过 PHP 向 MySql DB 中插入特殊字符,例如 '(右撇号)。

MySql 表定义为:

ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据通过 Java 传递给 PHP,所以:

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1", value1));       
nameValuePairs.add(new BasicNameValuePair("param2", value2));

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("blabla.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
response = httpclient.execute(httppost);

PHP 接收它是这样的:

//To be able to receive UTF-8 (needed?)


mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');

$param1 = $_POST['param1'];
$param2 = $_POST['param2'];

//Convertsion to UTF-8 (needed?)
$param1 = utf8_decode($param1);
$param2 = utf8_decode($param2);

$mysqli = new mysqli($hostname, $username, $password, $dbname);
mysqli_set_charset('utf8',$mysqli);
$mysqli->prepare("INSERT INTO ...

Insert 命令插入记录,但特殊字符变成“?”在表中。 有什么帮助吗?

即“A'B”在数据库中变为:“A?B”

谢谢

【问题讨论】:

  • 显示您发送的小字符串的示例。然后显示 php 如何接收该字符串。所以在你把它放入数据库之前。而且在你解码它之前 utf8。我们想先知道数据库是否与它有关。
  • $mysqli 分配后添加调用:$mysqli-&gt;set_charset("utf8");
  • 我已经编辑了我的问题,添加了 set_charset 函数和一个示例。但我继续遇到这个问题! :'(

标签: php android mysql utf-8 special-characters


【解决方案1】:

删除对utf8_decode 函数的调用就成功了!

【讨论】:

    【解决方案2】:

    试试 mysqli_real_escape_string() 函数。这会转义字符串中的特殊字符,以便在 SQL 语句中使用,同时考虑连接的当前字符集。

    示例:

    mysqli_real_ecape_string($mysqli,$param1);
    mysqli_real_ecape_string($mysqli,$param2);
    

    【讨论】:

    • 他正在使用准备好的语句。转义字符串没有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2012-10-17
    • 2016-04-16
    • 2016-11-24
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多