malformed utf-8 characters possibly incorrectly encoded - php

I have encoded image to base64 in iOS and sending it to server and then using base64_decode() on that string. But it is giving an error
malformed utf-8 characters possibly incorrectly encoded
i am doing this in laravel and using php core function;
public function createIdea(Request $request) {
$filename = str_random(8);
$imageStr = $request->input('idea_image');
$decodeImage = base64_decode($imageStr);
$image = imagecreatefromstring($decodeImage);
if ($request->hasFile($image)) {
$filename = $request->file($image)->getClientOriginalName();
$moveImage = $request->file($image)->move('images', $filename);
}
$idea = new Idea();
$idea->idea_title = $request->input('idea_title');
$idea->idea_info = $request->input('idea_info');
$idea->idea_image = "images/".$filename;
$idea->idea_location = $request->input('idea_location');
$idea->idea_description = $request->input('idea_description');
$idea->idea_description = $request->input('selection');
$idea->user_id = \Auth::id();
$idea->save();
$ideaId = $idea->id;
if ( ! $idea->id ) {
$statusCode =404;
response()->json(array('Status:' => 'Idea Creation FAILED'),$statusCode);
}else{
$response = $idea->toJson();
$statusCode =200;
return response()->json(array('Status:' => 'Idea Created Successfully', 'ideaId' => $ideaId, 'image' => $imageStr),$statusCode);
}
Any help would be appreciated.

Encoding the blob in base64 before serving the data in any language will allow you to transfer BLOB data as safe strings!

Related

How to download a base64 image in PHP from a web service?

I admit I have a lot of trouble with this problem (I don't know much about PHP and SOAP.
I have to get product pictures for an ecommerce via a web service of a provider (SOAP).
As shown in the picture below, the product pictures are converted to base64.
Example for a product picture
I need to retrieve all the pictures to upload them in a folder on my site and write the path of each picture in a CSV file.
The code below allows me to retrieve all the products that are sent to me via the web service. I recover all the products with the function RecupEtatStock() then, with the help of a loop, for each product I search if there are images with the function RecupPhotoProduct().
$wsdl = "https://sinex-saas.com/B00UWSUG9Z34TN22/Services/WebServiceStandard.asmx?WSDL";
$client = new SoapClient($wsdl);
$password = "????";
$username = "????";
$reffab = 4;
$codefab = 2;
$i = 0;
$fp = fopen(plugin_dir_path(__FILE__).'file.csv', 'w+');
$dataRecupererEtatStock = RecupEtatStock($username, $password, $client);
foreach ($dataRecupererEtatStock as $fields) {
$dataRecupPhotoProduit = RecupPhotoProduit($username, $password, $client, $fields->CodeFab, $fields->RefFab, $i);
$fields->image = $dataRecupPhotoProduit;
fputcsv($fp, get_object_vars($fields));
$i+=1;
}
fclose($fp);
Here is what the RecupPhotoProduct() function looks like. If there is no picture, the function returns null, otherwise it retrieves what the save_image() function returns.
function RecupPhotoProduit($pUsername, $pPassword, $pClient, $pCodeFab, $pReffab, $pi) {
$optionsRecupererPhotoProduit = array(
'user' => $pUsername,
'password' => $pPassword,
'codeFab' => $pCodeFab,
'refFab' => $pReffab,
);
$responseRecupererPhotoProduit = $pClient->RecupererPhotoProduit($optionsRecupererPhotoProduit);
$array = get_object_vars($responseRecupererPhotoProduit);
if(empty($array)) {
$responseRecupererPhotoProduit = null;
} else {
$responseRecupererPhotoProduit = $responseRecupererPhotoProduit->RecupererPhotoProduitResult;
$responseRecupererPhotoProduit = save_image($responseRecupererPhotoProduit, $pi);
}
return $responseRecupererPhotoProduit;
}
The above function allows me to retrieve the string in "RetrievePhotoProductResult" from this XML result:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<RecupererPhotoProduitResponse xmlns="http://tempuri.org/">
<RecupererPhotoProduitResult>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</RecupererPhotoProduitResult>
</RecupererPhotoProduitResponse>
</soap:Body>
</soap:Envelope>
So for this example, the MIME64 encoded text is :
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
And this is what my save_image() function looks like. It decodes the base64 image from the "RetrievePhotoProductResult" part of the previous XML and uploads it to my WordPress plugin directory.
function save_image( $base64_img, $title ) {
$base64_img = str_replace('data:image/png;base64,', '', $base64_img);
$base64_img = str_replace(' ', '+', $base64_img);
$data = base64_decode($base64_img);
$file = plugin_dir_path(__FILE__) . $title . '.png';
return file_put_contents($file, $data);
}
But here is my problem, the images download well in my directory. However, I can't open them.
For example, if I try to open them with Paint, this is what I get (Whether I open an image with Paint or not, it's the same thing. I think the problem is the base64 encoding):
Paint cannot read this file. It is not a valid bitmap file or its format is not currently supported.
And if I want to access an image from my ecommerce site, I have a simple white dot that appears:
I have a simple white dot that appears
And here is what the base64 string looks like after decoding:
the base64 string
Do you know how I could download a base64 image via a php web service?
<?php
$encode = "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";
$decode = base64_decode($encode);
$size = getImageSizeFromString($decode);
var_dump($size);
if (empty($size['mime']) || strpos($size['mime'], 'image/') !== 0) {
die('Base64 value is not a valid image');
}
$ext = substr($size['mime'], 6);
$img_file = "filename.{$ext}";
file_put_contents($img_file, $decode);
echo $ext;
?>
this will work for all valid images.

Uploading A Base64 encode Image to php server

how do i upload a Base64 encoded image to a PHP server using HttpURLConnection? All the answers i have seen so far are based on HttpClient which no longer exists. I got a httprequest.java library that sends post request to the server, the problem i have with it is that the image string at the server-side is always different to the one i send.
This is my code so far.
HttpRequest request = new HttpRequest(Konstants.address+Konstants.save_image);
request.prepare(HttpRequest.Method.POST);
String encodedImage = Base64.encodeToString(image, Base64.URL_SAFE);
//image is a byte[] with image data
HashMap<String, String>map = new HashMap<>();
map.put("username",username);
map.put("image", encodedImage);
Log.d("IMAGE-DATA", encodedImage);
request.withData(map);
JSONObject object = request.sendAndReadJSON();
code = object.getInt("response_code");
if (code == 0)
flag = Boolean.FALSE;
String s = object.getString("response_message");
Log.d("SERVER-REPLY", s);
//encodedImage and s are different
and the PHP code below:
<?php
if(!$_SERVER['REQUEST_METHOD']=='POST'){
$response["response_code"] = 0;
$response["response_message"] = "INVALID REQUEST";
die(json_encode($response));
}
if (empty($_POST)) {
$response["response_code"] = 0;
$response["response_message"] = "One or both of the fields are empty .";
die(json_encode($response));
}
$username1 = urldecode($_POST['username']);
$data = $_POST['image'];
$binary = base64_decode($data);
list($path, $tmp) = explode(".", $username1);
$success = file_put_contents("./images/$path.png", $binary);
if ($success){
$response["response_message"]=$data;
$response["response_code"] = 1;
}else{
$response["response_message"]="failure";
$response["response_code"] = 0;
}
echo json_encode($response);
?>
Look into the differences. Sometimes you need to replace spaces with plusses.
$binary = base64_decode(str_replace(" ", "+", $_POST['image']));

Response of REST API in JSON format

In magento as we use the rest url to access the data, as http://localhost/magento/api/rest/products it returns in xml format instead of that I need JSON.
I have tried below code, but no use
$this->getResponse()->setHeader('Content-type', 'application/json');
$this->getResponse()->setBody($jsonData);
in the folder \magento\app\code\core\Mage\Api\Controller\Action.php
vinox, you should override the default file Request.php. copy \app\code\core\Mage\Api2\Model\Request.php to your local directory and add the following code just before end of the getAcceptTypes() Method.
unset($orderedTypes);
$orderedTypes=Array("application/json" => 1);
in other way your getAcceptTypes() method should look like this.
public function getAcceptTypes(){
$qualityToTypes = array();
$orderedTypes = array();
foreach (preg_split('/,\s*/', $this->getHeader('Accept')) as $definition) {
$typeWithQ = explode(';', $definition);
$mimeType = trim(array_shift($typeWithQ));
// check MIME type validity
if (!preg_match('~^([0-9a-z*+\-]+)(?:/([0-9a-z*+\-\.]+))?$~i', $mimeType)) {
continue;
}
$quality = '1.0'; // default value for quality
if ($typeWithQ) {
$qAndValue = explode('=', $typeWithQ[0]);
if (2 == count($qAndValue)) {
$quality = $qAndValue[1];
}
}
$qualityToTypes[$quality][$mimeType] = true;
}
krsort($qualityToTypes);
foreach ($qualityToTypes as $typeList) {
$orderedTypes += $typeList;
}
unset($orderedTypes);
$orderedTypes=Array("application/json" => 1);
return array_keys($orderedTypes);
}
I guess your $jsonData is not actually JSON. Try using a json helper
$jsonData = Mage::helper('core')->jsonEncode($data)

XML-JSON content negotiation

Im looking to only display certain things from pages like this: http://sc2ranks.com/api/psearch/am/MxGPezz/1t/division/Felanis%20Sierra?appKey=sentinelgaming.net . So far I am able to display something but its not even the correct number, using the php below. Can someone show me how I would display the "achivement-points" of this player from this XML web page?
$url = 'http://sc2ranks.com/api/psearch/am/MxGPezz/1t/division/Felanis%20Sierra?appKey=sentinelgaming.net';
$xml = file_get_contents($url);
echo $xml->achievement-points;
Thanks
The content-type of this file varies depending on the Accept header or the format query parameter. It seems you can retrieve at least XML or JSON.
The default you get from file_get_contents() will be JSON because it does not include an Accept request header, but the default from a browser will be XML because browsers usually include an XML mime type in their Accept request header.
To get JSON:
$url = 'http://sc2ranks.com/api/psearch/am/MxGPezz/1t/division/Felanis%20Sierra?appKey=sentinelgaming.net';
// &format=json is not strictly necessary,
// but it will give you fewer surprises
$json = file_get_contents($url.'&format=json');
$records = json_decode($json);
echo $records[0]->achievement_points, "\n";
To get XML:
$sxe = simplexml_load_file($url.'&format=xml');
echo (string) $sxe->record->{'achievement-points'}, "\n";
To use the $sxe object see this SimpleXML cheat sheet.
Instead of using the format param you could set the Accept header. You can also add some abstraction to getting a url so that you can retrieve the content type and encoding as well. See example below.
function get_url($url, $context=null) {
$response = file_get_contents($url, false, $context);
$ctypeheaders = preg_grep('/^Content-Type:\s/i', $http_response_header);
$ctype = NULL;
if ($ctypeheaders) {
$ctype = end($ctypeheaders);
$ctype = end(explode(':', $ctype, 2));
$ctype = explode(';', $ctype, 2);
$charset = isset($ctype[1]) ? $ctype[1] : '';
if ($charset && preg_match('/charset\s*=\s*([^\s]+)/i', $charset, $matches)) {
$charset = $matches[1];
}
$ctype[1] = $charset;
$ctype = array_map('trim', $ctype);
}
return array($response, $ctype);
}
You can then use get_url() like so:
// With no accept header, just see what we get:
list($content, $contenttype) = get_url($url);
list($type, $encoding) = $contenttype;
// $type will be 'application/xml' or 'application/json'
// $encoding is very handy to know too
// Or we can specify an accept header:
$opt_accept_xml = stream_context_create(array(
'http' => array(
'header' => "Accept: application/xml\r\n"
)
));
list($content, $contenttype) = get_url($url, $opt_accept_xml);
Maybe:
echo $xml->record[0]->achievement-points;

Array contents not being passed fully from php client to a .NET web service

I want to pass an image as a byte array from php to a .NET web serice.
The php client is as follows:
<?php
class Image{
public $ImgIn = array();
}
$file = file_get_contents('chathura.jpg');
$ImgIn = str_split($file);
foreach ($ImgIn as $key=>$val) { $ImgIn[$key] = ord($val); }
$client = new SoapClient('http://localhost:64226/Service1.asmx?wsdl');
$result = $client->PutImage(new Image());
echo $result->PutImageResult;
//print_r($ImgIn);
?>
Here is the web method in ASP.NET web service:
[WebMethod]
public string PutImage(byte[] ImgIn)
{
System.IO.MemoryStream ms =
new System.IO.MemoryStream(ImgIn);
System.Drawing.Bitmap b =
(System.Drawing.Bitmap)Image.FromStream(ms);
b.Save("imageTest", System.Drawing.Imaging.ImageFormat.Jpeg);
return "test";
}
When I run this the image content is correctly read to ImgIm array in php client. (In this instance the image had 16992 elements.) However when the array is passed to the web service method it contains only 5 elements (the first 5 elements of the image)
Can I know what is the reason for the loss of data ? How can I avoid it ?
Thanks
file_get_contents returns the file contents as string which is not useful for binary files such as images. Try this:
$handle = fopen("chathura.jpg", "r");
$contents = fread($handle, filesize("chathura.jpg"));
fclose($handle);
$client = new SoapClient('http://localhost:64226/Service1.asmx?wsdl');
$result = $client->PutImage($contents);
Guys, it seems that it is not going to be any use to try and pass data as a byte array as PHP anyway converts it to a string when sending. This conversion seems to introduce control characters to the string, making it only send a part of the byte array. I got this to work by sending a base64 encoded string and decoding inside the server.
My client side code:
<?php
class Image{
public $ImgIn = '';
}
//ini_set("memory_limit","20M");
$imageData = file_get_contents('chathura.jpg');
$encodedData = base64_encode($imageData);
$Img = new Image();
$Img->ImgIn = $encodedData;
$client = new SoapClient('http://localhost:64226/Service1.asmx?wsdl');
$result = $client->PutImage($Img);
echo($result->PutImageResult);
?>
ASP .NET web service code:
[WebMethod]
public string PutImage(String ImgIn)
{
byte[] ImgInBytes = Convert.FromBase64String(ImgIn);
System.IO.MemoryStream ms =
new System.IO.MemoryStream(ImgInBytes);
System.Drawing.Bitmap b =
(System.Drawing.Bitmap)Image.FromStream(ms);
b.Save("C:\\imageTest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
return "success";
}

Categories