0

「Mobile&gaming solutions」のような値を含むmysqlデータベースにアクセスするiPhoneでWebサービスを使用してプログラミングしています。この値をユーザーから文字列で取得し、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);
?> 

ブナメをエコーすると、「&」が原因で「Mobile&Gaming solutions」ではなく「Mobile」と表示されます。特殊文字を含む文字列を xcode から php に渡す方法を教えてください。

4

1 に答える 1

1

PHPとは関係ありません。URL でクエリ パラメータを引用していません。

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

これを行う1つの方法は次のとおりです。

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 に答える