سؤال

أقوم بنشر محتويات حقل النموذج عبر AJAX إلى برنامج نصي PHP واستخدام JavaScript escape(field_contents). المشكلة هي أنه يتم تجريد أي علامات زائد واستبدالها بالمساحات. كيف يمكنني "تشفير" علامة Plus بأمان ثم فك "فك تشفيرها" على جانب PHP؟

هل كانت مفيدة؟

المحلول

يستخدم encodeURIComponent() في JS وفي PHP ، يجب أن تتلقى القيم الصحيحة.

ملاحظة: عند الوصول إلى $_GET, $_POST أو $_REQUEST في PHP ، تقوم باسترداد القيم التي تم فك تشفيرها بالفعل.

مثال:

في JS الخاص بك:

// url encode your string
var string = encodeURIComponent('+'); // "%2B"
// send it to your server
window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B

على الخادم الخاص بك:

echo $_GET['string']; // "+"

هو فقط طلب HTTP الخام الذي يحتوي على البيانات المشفرة عناوين URL.

للحصول على طلب ، يمكنك استرداد هذا من URI. $_SERVER['REQUEST_URI'] أو $_SERVER['QUERY_STRING']. للحصول على وظيفة urlencoded ، file_get_contents('php://stdin')

NB:

decode() يعمل فقط مع الأحرف المشفرة بايت واحد. لن يعمل لنطاق UTF-8 الكامل.

على سبيل المثال:

text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100 
// correct
encodeURIComponent(text); // "%C4%80"

ملحوظة: "%C4%80" يعادل: escape('\xc4\x80')

وهو تسلسل البايت (\xc4\x80) وهذا يمثل Ā في UTF-8. لذلك إذا كنت تستخدم encodeURIComponent() يجب أن يعرف جانب الخادم الخاص بك أنه يتلقى UTF-8. وإلا فإن PHP سوف ينقل الترميز.

نصائح أخرى

في JavaScript جرب:

encodeURIComponent() 

وفي PHP:

urldecode($_POST['field']);

القيمة السداسية السداسية التي تبحث عنها %2B

للحصول عليها تلقائيًا في PHP ، قم بتشغيل السلسلة الخاصة بك من خلال urlencode($stringVal). ثم قم بتشغيله urldecode($stringVal) لاستعادتها.

إذا كنت تريد أن تعالجها JavaScript ، فاستخدمها escape( str )

تعديل

بعد تعليق @Bobince فعلت المزيد من القراءة وهو محق. يستخدم encodeURIComponent(str) و decodeURIComponent(str). الهروب لن يحول الشخصيات ، فقط هرب منها \

لجعلها أكثر إثارة للاهتمام ونأمل أن نمكّن من سحب الشعر لشخص آخر. باستخدام Python ، قام القاموس المبني لجهاز يمكننا استخدام Curl لتكوينه.

مشكلة: {"timezone":"+5"} //throws an error " 5"

المحلول: {"timezone":"%2B"+"5"} //Works

لذلك ، باختصار:

var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])

شكرا لهذا المنصب!

إذا كان عليك أن تفعل حليقة في PHP ، فيجب عليك استخدامها urlencode() من PHP ولكن بشكل فردي!

strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")

اذا فعلت urlencode(strPOST), ، سوف تجلب لك مشكلة أخرى ، سيكون لديك عنصر واحد 1 وسيكون تغيير قيمة xx وستكون كقيمة واحدة ، انظر هنا العائد!

مثال 1

$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B

مثال 2

$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B

مثال 1 هو الطريقة الجيدة لإعداد سلسلة للنشر في حليقة

مثال 2 أظهر أن المستقبلات لن يرى المساواة والأمبر والأمبير لتمييز كلتا القيمة!

كانت مشكلتي مع اللهجات (á é) وعلامة Plus (+) عندما أحاول حفظ "أمثلة رمز" JavaScript إلى MySQL:

الحل الخاص بي (ليس الطريقة الأفضل ، لكنه يعمل):

JavaScript:

function replaceAll( text, busca, reemplaza ){
  while (text.toString().indexOf(busca) != -1)
  text = text.toString().replace(busca,reemplaza);return text;
}


function cleanCode(cod){
code = replaceAll(cod , "|", "{1}" ); // error | palos de explode en java
code = replaceAll(code, "+", "{0}" ); // error con los signos mas   
return code;
}

وظيفة لحفظ:

function save(pid,code){
code = cleanCode(code); // fix sign + and |
code = escape(code); // fix accents
var url = 'editor.php';
var variables = 'op=save';
var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime();    
var result = null;
$.ajax({
datatype : "html",
data: myData,  
url: url,
success : function(result) {
    alert(result); // result ok                     
},
}); 
} // end function

وظيفة في PHP:

<?php
function save($pid,$code){
    $code= preg_replace("[\{1\}]","|",$code);
    $code= preg_replace("[\{0\}]","+",$code);
    mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'");
}
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top