الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الحروف العربيه لا تظهر بشكل صحيح مع الاجاكس

مغلق
بدأه macnux في 11 فبراير 2008 · 14 رد · 2,257 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله

نعلم عند تغيير ترميز الصفحه الى utf-8 نجد ان الحروف العربيه تصبح مثل ظ?ط³ط¨ظ„ظ?ط³ط§ظ„ط¨ط³ظ?ط§ظ?ط³ط¨ط§ط§

المشكله هى:-

طورت سكربت php واستخدم الاجاكس يقوم بحفظ البيانات فى جدول الcollation له utf-8 ويقوم السكربت بحفظ البيانات بالشكل ظ?ط³ط¨ظ„ظ?ط³ط§ظ„ط¨ط³ظ?ط§ظ?ط³ط¨ط§ط§

وذلك اذا كان ترميز الصفحه utf-8 او windows-1256

واضفت mysql_query("set names 'cp1256';"); عند الاتصال وعند حفظ البيانات وعملت ملف htaccess وبه AddDefaultCharset windows-1256

ومع ذلك لا زالت البيانات تحفظ بالشكل السابق

اما اذا لم استخدم الاجاكس فتحفظ البيانات بشكل صحيح

هل من حل ؟؟!

شكرا

تم تعديل هذه المشاركة بواسطة macnux في 11 فبراير 2008 في 02:12

#2

مشكلتك في إرسال البيانات العربية بالأجاكس

إذا فلا بد من التأكد من نوع الحروف المرسلة وذلك بإضافة نوع الحروف في الهيدير

	request.setRequestHeader('charset','windows-1256');
	request.setRequestHeader('Accept-Charset','windows-1256');

ثم إن كنت أرسلها بالتشفير التالي فتأكد من استلامها كذلك :

وذلك باستخدام المكون xajax وهو احترافي وواعد يحل مشاكل الأجاكس كلها.

واستخدام المكون utf8.class.php

ابحث عنهما في قوقل

وانظر الرابط

/index.php?showtopic=124455

وعليك باستخدام نوع واحد فإما windows-1256 أو utf8

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#3

شكرا لردك

الان استخدم التالى فى بدايه الصفحه

request.setRequestHeader('charset','windows-1256');

request.setRequestHeader('Accept-Charset','windows-1256');

فهمت الى هنا ممكن توضح ما بعده من فضلك؟

#4

عند ارجاع عرض البيانات تعود بشكل صحيح ولكن عند ارسال البيانات تكتب فى قاعده البيانات بالشكل ?ط³ط¨ظ„ظ?ط³ط

والبرنامج الذى يولد اكواد الاجاكس يكتب الكثير وبحثت فى الناتج وجدت xmlhttprequest

واحدد لكل واحد منهم التالى

request.setRequestHeader('charset','windows-1256');

request.setRequestHeader('Accept-Charset','windows-1256');

ولكن لا زالت تظهر بالشكل السابق لا اعلم ما الذى يشوه البيانات عند الحفظ اما عند الاستعراض فهى تاتى كما هى بدون اى تغيير . ماذا تعتقد ان يكون الخطأ؟

#5

أولاً حمل utf8.class.php من هنا

http://www.phpclasses.org/browse/package/1974.html

ولقد استفدته من موقع الدكتور نت جزاه الله خيراً

http://qatardr.net/class/919

http://qatardr.net/class/916

عفواً لاختصار الوقت وضعته بالمفرقات

ثم ضع هذا الكود قبل إرسال البيانات إلى قاعدة البيانات :

require_once("utf8.class.php");
$FileCharSet = file_get_contents("charset.MAP");
$utf8 = new utf8('CP1256');
for( reset( $_POST);  $key = key( $_POST);  next( $_POST) ) {
if (is_string($_POST[$key])) $mypost[$key]= $utf8->utf8ToStr($_POST[$key]);
}	
unset ($FileCharSet);
unset ($utf8);

وإذا كنت تريده يعمل مع الأجاكس وغيره فعليك أن تتأكد قبل تطبق عليه الكود هل الطلب آتٍ من الجافا سيكريبت أم لا

كيف

إليك هذا الكود :

#-------------------------------------------------------------------#
function env($key) {
	if (isset($_SERVER[$key])) {
		return $_SERVER[$key];
	} elseif (isset($_ENV[$key])) {
		return $_ENV[$key];
	} elseif (getenv($key) !== false) {
		return getenv($key);
	}
}
#---------------------------------------------------------------#
function isAjax() {
	if (env('HTTP_X_REQUESTED_WITH') != null) {
		return env('HTTP_X_REQUESTED_WITH') == "XMLHttpRequest";
	} else {
		return false;
	}
}
#---------------------------------------------------------------#

نسأل الله لك التوفيق

utf8_2006_05_21.zip

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 11 فبراير 2008 في 19:20

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#6
AddDefaultCharset windows-1256

اضف هاذا في ملف

.htaccess

او قم بوضع الترميز الذي ترغب فيه

#7

أخي أحمد ahmad123 زادك الله علماً

هل يغني هذا الكود ل[ AddDefaultCharset windows-1256 ] عن ضرورة التحويل التي ذكرتها بالكلاس utf8.class.php

لو تبين لنا أكثر عن هذا الأمر وجزاك الله خيراً

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#8

شكرا لردك

لو امكن ان ترى الملفات التى اعمل عليها اكون شاكرا لك ممكن ارفعها لك

فالملفات التى اعمل عليها تستخدم الكلاس json وهذه المكتبه لا تقبل الى utf-8 ومن ثم فانها تغير ترميز ما يدخل اليها اجباريا الى utf-8 وتتعامل معه

ممكن ارفع الملفات لتراها؟

جزاك الله خيرا

#9

json أعرفها وكلامك صحيح هي تحول ، ولكن لماذا لا تجرب كل الخيارات

وقبل ذلك تأكد من إرسال الهيدر من الجافا سيكريبت وهل الكائن الأجاكسي ( xmlhttprequest ) هو باسم request عندك أم لا أنا نسخته كما هو عندي ولكن ينبغي عليك أن تنتبه لذلك .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#10

اشكرك على تعاونك

لقد وصلت لشئ وهو ان ما يرسل من $_POST وعند تنقيح البرنامج اجد ان ترميزها utf-8 وتظهر بالشكل السابق و كما انت قلت انها المشكله

جربت هذا الكود الذى اعطيتنى ايه بالاعلى

require_once("utf8.class.php");

$FileCharSet = file_get_contents("charset.MAP");

$utf8 = new utf8('CP1256');

for( reset( $_POST); $key = key( $_POST); next( $_POST) ) {

if (is_string($_POST[$key])) $mypost[$key]= $utf8->utf8ToStr($_POST[$key]);

}

unset ($FileCharSet);

unset ($utf8);

ولكنه يقوم بطبع بيانات الملف cp1256.MAP على الشاشه !!!

تم تعديل هذه المشاركة بواسطة macnux في 12 فبراير 2008 في 10:55

#11

وايضا يكتب التالى

Fatal error: Call to a member function loadCharset() on a non-object

وانا نسخت ما كتبه انت اعلاه فقط

#12

الذى غير فى حفظ البيانات هو انى غيرت الجافا سكربت وكتبت

request.setRequestHeader('charset','windows-1256');

بالمناسبه هل هى charset ام encoding

فحفظ البيانات ك %u0645%u062D%u0645%u062F

#13

عفواً

أنا أخطأ لقد ألصقت من مشروع لي على utf8.class.php بعد تعديله

فقط احفذ السطر هذا

$FileCharSet = file_get_contents("charset.MAP");

لا تحتاجه

أما بالنسبة لنصوص الجافا سيكريبت

فجرب الكود التالي ولا تجد إن شاء الله مشكلة :

var request;
var tagid = '';
var img_loading = '<img src="/images/progress.gif" />';
var msg_loading = "loading ....";
//---------------------------------------------------------------//
function e(id) {
	if (!id) { return null; }
	var returnObj = document.getElementById(id);
	if (!returnObj && document.all) {
		returnObj = document.all[id];
	}
	return returnObj;
}
//---------------------------------------------------------------//
function HTTPObject() {
		var req = null;
		if (typeof XMLHttpRequest != "undefined")
			req = new XMLHttpRequest();
		if (!req && typeof ActiveXObject != "undefined")
		{
			try
			{
				req=new ActiveXObject("Msxml2.XMLHTTP");
				XMLHttpRequest = function(){return new ActiveXObject("Msxml2.XMLHTTP");}
			}
			catch (e)
			{
				try
				{
					req=new ActiveXObject("Microsoft.XMLHTTP");
					XMLHttpRequest = function(){return new ActiveXObject("Microsoft.XMLHTTP");}
				}
				catch (e2)
				{
					try {
						req=new ActiveXObject("Msxml2.XMLHTTP.4.0");
						XMLHttpRequest = function(){return new ActiveXObject("Msxml2.XMLHTTP.4.0");}
					}
					catch (e3)
					{
						req=null;
					}
				}
			}
		}
		if(!req && window.createRequest)
			req = window.createRequest();

		if (!req) this.DebugMessage("Request Object Instantiation failed.");

		return req;
}
//---------------------------------------------------------------//
function post(post_data,  url) {
	document.body.style.cursor = 'wait';
	window.status = 'Sending Request...';
	request = HTTPObject();
	request.onreadystatechange = WriteTag;
	request.open('POST', url, true);
	request.setRequestHeader('charset','windows-1256');
	request.setRequestHeader('Accept-Charset','windows-1256');
	request.setRequestHeader('X-Requested-With','XMLHttpRequest');
	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length",post_data.length);
	request.setRequestHeader("Connection","close");
	request.send(post_data);
}
//---------------------------------------------------------------//
function WriteTag() {
	textout = '';
	if (request.readyState == 4) {
		if (request.status == 200) {
			if (request.responseXML && request.responseXML.documentElement){
				xajax.processResponse(request.responseXML);
			}else {
				var textout = request.responseText;
							}
		} else {
			var textout = 'There was a problem with the request.';
			var lengthTextout = textout.length;
		}
	} else {
		var textout = img_loading+msg_loading;
	}
	if (tagid!='') {
		e(tagid).innerHTML.match(/^\s*$/);
		e(tagid).innerHTML = textout;
		e(tagid).display = 'block';
		document.body.style.cursor = 'default';
		window.status = 'Done.';
	}
	if (textout.length > lengthTextout){
		tagid='';
		request = null;
	}
}
//----------------------

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 12 فبراير 2008 في 19:46

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#14

يا اخى الكريم اوشكت على حل مشكلتى وهى النص هذا %u0645%u062D%u0645%u062F يتم عمل decode له باستخدام داله javascript وهى كالتالى

unescape(encoded.replace(/\+/g, " "));

حيث ان encoded هو النص السابق

ويظهر العربى بعدها 100% -------

انا جربت urldecode و rawurldecode كل منهم لم يفعل شيئا ممكن داله php تعمل نفس عمل داله الجافا سكربت السابقه

وجزاك الله خيرا

#15

الحمد لله وصلت للحل بفضل الله ثم لك

لابد ان يكون الترميز حروف كبيره UTF-8 وليس utf-8 وذلك ولم استخدم الكلاس utf.class.php واستخدمت داله iconv

على العموم ساتابع باقى الاشياء واعذرنى ربما اسال مره اخرى

اشكرك اخى الكريم على مجهودك الكبييييييييييييييييييييييييييييير معى

لك كل التحيه

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…