سؤال

أنا أكتب Chrome الذي يعمل مع موقع الويب الذي يستخدم ISO-8859-1.فقط لإعطاء بعض السياق ، ما التمديد لا يجعل نشر في موقع منتديات أسرع من خلال إضافة أكثر ملاءمة شكل آخر.قيمة النص حيث يتم كتابة الرسالة ومن ثم إرسالها عن طريق Ajax الاتصال (باستخدام مسج).

إذا كانت الرسالة تحتوي على شخصيات مثل á هذه الشخصيات تظهر á في نشر الرسالة.إجبار المتصفح على عرض UTF-8 بدلا من ISO-8859-1 يجعل á تظهر بشكل صحيح.

أفهم أن جافا سكريبت يستخدم ترميز UTF-8 عن سلاسل, لذا فمن رأيي أنه إذا لم فيرت سلسلة ISO-8859-1 قبل إرساله ، ينبغي أن تحل مشكلتي.ومع ذلك يبدو أن هناك أي طريقة مباشرة لفعل هذا الترميز في جافا سكريبت و لا أستطيع لمس برمجية من جانب الخادم.أي نصيحة ؟

لقد حاولت وضع نموذج تم إنشاؤها باستخدام iso-8859-1 مثل هذا:

var form = document.createElement("form");
form.enctype = "application/x-www-form-urlencoded; charset=ISO-8859-1";

و أيضا:

var form = document.createElement("form");
form.encoding = "ISO-8859-1";

ولكن هذا لا يبدو أن العمل.

تحرير:

المشكلة في الواقع كذب في كيفية مسج كان urlencoding الرسالة (أو شيء على طول الطريق) ، وأنا ثابت على ذلك بقوله مسج عدم معالجة البيانات والقيام بنفسي كما هو مبين في المقتطف التالي:

function cfaqs_post_message(msg) {
  var url = cfaqs_build_post_url();
  msg = escape(msg).replace(/\+/g, "%2B");
  $.ajax({
    type: "POST",
    url: url,
    processData: false,
    data: "message=" + msg + "&post=Preview Message",
    success: function(html) {
      // ...
    },
    dataType: "html",
    contentType: "application/x-www-form-urlencoded"
  });
}
هل كانت مفيدة؟

المحلول

أفهم أن JavaScript تستخدم UTF-8 لسلاسلها

لا لا.

كل صفحة لها تشفير charset محدد في علامة التعريف ، فقط اسفل عنصر الرأس

<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>

أو

<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>

إلى جانب ذلك ، كل صفحة يجب تحريرها مع ترميز Charset المستهدف. خلاف ذلك ، لن يعمل كما هو متوقع.

ومن الجيد تحديد ترميز Charset المستهدف على جانب الخادم.

Java
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

PHP
header("Content-Type: text/html; charset=UTF-8");

C#
I do not know how to...

ويمكن أن تكون فكرة جيدة إعداد كل ملف نصي سواء كان يستخدم أحرفًا حساسة (á ، é ، í ، ó ، ú وما إلى ذلك ...).

<script type="text/javascript" charset="UTF-8" src="/PATH/TO/FILE.js"></script>

...

لذلك هي نظريتي أنه إذا قمت بنقل السلسلة إلى ISO-8859-1 قبل إرسالها ، فيجب أن تحل مشكلتي

لا لا.

الخادم الهدف يمكن أن تتعامل مع السلاسل في غير ISO-8859-1. على سبيل المثال ، يتعامل Tomcat في ISO-8859-1 ، بغض النظر عن كيفية إعداد صفحتك. لذلك ، على جانب الخادم ، قد تضطر إلى إعداد طلبك وفقًا لكيفية إعداد صفحتك.

Java
request.setCharacterEncoding("UTF-8")

PHP
// I do not know how to...

إذا كنت ترغب حقًا في ترجمة ترميز Charset المستهدف ، فحاول على النحو التالي

InternetExplorer
    formElement.encoding = "application/x-www-form-urlencoded; charset=ISO-8859-1";
ELSE
    formElement.enctype  = "application/x-www-form-urlencoded; charset=ISO-8859-1";

أو يجب عليك توفير وظيفة تحصل على تمثيل رقمي ، في مجموعة أحرف Unicode ، التي يستخدمها كل حرف. ستعمل بغض النظر عن ترميز Charset المستهدف. على سبيل المثال ، á كمجموعة أحرف Unicode هي u00e1 ؛

alert("á without its Unicode Character Set numerical representation");
function convertToUnicodeCharacterSet(value) {
    if(value == "á")
        return "\u00E1";
}
alert("á Numerical representation in Unicode Character Set is: " + convertToUnicodeCharacterSet("á"));

هنا يمكنك أن ترى في العمل:

يمكنك استخدام هذا حلقة الوصل كمبدأ توجيهي (انظر JavaScript Escapes)

إضافة إلى الإجابة الأصلية كيف أقوم بتطبيق jQuery funcionality

var dataArray = $(formElement).serializeArray();
var queryString = "";
for(var i = 0; i < dataArray.length; i++) {
    queryString += "&" + dataArray[i]["name"] + "+" + encodeURIComponent(dataArray[i]["value"]);
}
$.ajax({
    url:"url.htm",
    data:dataString,
    contentType:"application/x-www-form-urlencoded; charset=UTF-8",
    success:function(response) {
        // proccess response
    });
});

إنه يعمل بشكل جيد دون أي صداع.

يعتبر،

نصائح أخرى

كان عندي مشكلة مشابهة.أنا في حاجة إلى تمرير معلمة URL باستخدام مسج لجعل اياكس الاتصال أكثر من مرة قيم المعلمات شملت لهجات.

كل الصفحات لتعيين charset=ISO-8859-1 " و " جافا سكريبت وظائف:encodeURI, encodeURIComponent.... الخفقط يستخدم ترميز UTF-8.

ما قمت به هو إنشاء رابط في الصفحة الأصلية ، بما في ذلك جميع المعلمات دون أي ترميز ، دعونا نقول:

var myLink = document.getElementById("myHiddenLink");
myLink.setAttribute("href", "México, Perú, María and any other words with accents and spaces");

ثم تعيين href قيمة إلى متغير, مثل هذا:

var theLink = myLink.getAttribute("href");

حتى النهاية "theLink" متغير قيمة ISO-8859-1 المشفرة و كل شيء يعمل على ما يرام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top