0

我正在使用 iphone 中的 web 服务进行编程,该服务访问 mysql 数据库,其中包含“移动和游戏解决方案”等值。我从用户的字符串中获取这个值并传递给 php 文件。但是 php 不接受带有 '&' 的字符串。它只接受“移动”。帮我。我在 xcode 中的代码是:

strEditbuunit = [labeditbunit.text stringByReplacingOccurrencesOfString:@" " withString:@"+"];

NSString *Updpost =[NSString stringWithFormat:@"buname=%@",strEditbuunit];

UpdLTRhostStr = @"http://localhost/practice/ltrupdate.php?";

UpdLTRhostStr = [UpdLTRhostStr stringByAppendingString:Updpost];  
UpdLTRdataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:UpdLTRhostStr]];
UpdLTRserverOutput = [[NSString alloc] initWithData:UpdLTRdataURL encoding: NSASCIIStringEncoding];


<?php
$con = mysql_connect("192.168.0.82","android","android");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("androidlogin", $con);
$buname = $_GET["buname"];
$retval1 = mysql_query( "SELECT code_id FROM typedescs where name = '$buname'" );
    while($row1 = mysql_fetch_assoc($retval1))
    {
        $bu_id = $row1['code_id'];

    }
 echo $buname;
mysql_close($con);
?> 

当我回显 buname 时,由于“&”,它给了我“移动”而不是“移动和游戏解决方案”。请帮助我如何将带有特殊字符的字符串从 xcode 传递给 php。

4

1 回答 1

1

它与PHP无关。您没有在 URL 中引用查询参数。

UpdLTRhostStr = @"http://localhost/practice/ltrupdate.php?";
UpdLTRhostStr = [UpdLTRhostStr stringByAppendingString:Updpost];  

这是一种方法:

UpdLTRhostStr = [NSString
    stringWithFormat:@"http://localhost/practice/ltrupdate.php?buname=%@",
    CFURLCreateStringByAddingPercentEscapes(
        kCFAllocatorDefault, (CFStringRef) buunit, NULL,
        CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8)];

不要忘记,在将字符串传递给 MySQL 之前,您也需要在 PHP 端对字符串进行转义。正如 Marc B 指出的那样,您有一个严重的安全漏洞。

于 2013-03-26T05:31:41.033 回答