سؤال

مساء الخير يا رفاق.

هذا هو الكود الخاص بي:

static private  function removeAccentedLetters($input){
    for ($i = 0; $i < strlen($input); $i++) {
        $input[$i]=self::simplify($input[$i]);
    }
    return $input;
}
static private function simplify($in){
    $ord=ord($in);
    switch ($ord) {
        case 193: //Á...
        return 'A';
        case 98: //b
        return 'a';
        default:
        return $in;
    }
}

موافق. هذا هو الشيء الذي لا يعمل

case 193: //Á...
  return 'A';

وهذا هو الشيء الذي يفعله:

case 98: //b
return 'a';

هذه فقط لأغراض الاختبار.

هل يمكن لأي شخص أن يخبرني ماذا يحدث؟ كان لدي نفس النوع من الخطأ من قبل ، لكنني الآن لا أستخدم أي ASCII الممتد في الكود نفسه ، والذي كان سبب الخطأ من قبل.

أعتقد أنه يجب أن يكون له علاقة بتشفير الشخصيات ولكني لست متأكدًا. بالمناسبة ، أقوم بترميز Eclipse ، ووفقًا لذلك ، فإن تشفير الأحرف الذي أستخدمه هو CP1252.

أوه ، ونعم ، من المفترض أن يزيل الكود أي رسائل معلمة مثل à واستبدالها بخطوطها الأساسية ، أي á-> أ

شكرا مقدما

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

المحلول

هل يمكن أن يكون ذلك إذا كان لديك أحرف متعددة البايتات ، وكنت تتجول في كل حرف باستخدام strlen() للتحقق مما إذا كنت قد حلقت من خلال؟ strlen() يفترض 1 بايت == 1 حرف.

كنت أنظر إلى مكتبات الترجمة الحالية ل PHP.

نصائح أخرى

ربما تساعدك هذه الوظيفة في تركيبة مع MB_STRLEN:

mb_strcutأوmb_substr

تحرير: على سبيل المثال ، يمكنك الذهاب مثل هذا:

$string = 'cioèòà';
for ($i=0;$i<mb_strlen($string);$i++) {
  echo mb_substr($string, $i, 1);
}

هذا من شأنه أن يتردد عليك كل الساحات الفردية.

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