আমি কীভাবে পিএইচপি স্ট্রিংয়ের অক্ষর থেকে অ্যাকসেন্টগুলি সরিয়ে ফেলব?


94

আমি ইউআরএল-এ স্ট্রিংকে ব্যবহারযোগ্য করে তোলার প্রথম পদক্ষেপ হিসাবে পিএইচপি স্ট্রিংয়ের অক্ষর থেকে অ্যাকসেন্টগুলি সরিয়ে দেওয়ার চেষ্টা করছি।

আমি নিম্নলিখিত কোড ব্যবহার করছি:

$input = "Fóø Bår";

setlocale(LC_ALL, "en_US.utf8");
$output = iconv("utf-8", "ascii//TRANSLIT", $input);

print($output);

আমি যে আউটপুটটি আশা করব তা এই জাতীয় কিছু হবে:

F'oo Bar

যাইহোক, উচ্চারণযুক্ত অক্ষরগুলি অনুলিখনের পরিবর্তে তাদেরকে প্রশ্ন চিহ্ন দিয়ে প্রতিস্থাপন করা হবে:

F?? B?r

আমি অনলাইনে যা কিছু পাই তা ইঙ্গিত করে যে লোকেলটি সেট করা এই সমস্যাটি ঠিক করবে, তবে আমি ইতিমধ্যে এটি করছি। আমি ইতিমধ্যে নিম্নলিখিত বিবরণ চেক করেছি:

  1. আমি যে লোকেলটি সেট করছি সেটি সার্ভার দ্বারা সমর্থিত (উত্পাদিত তালিকার অন্তর্ভুক্ত locale -a)
  2. উত্স এবং লক্ষ্য এনকোডিংগুলি (ইউটিএফ -8 এবং এএসসিআইআই) সার্ভারের আইকনভি সংস্করণ দ্বারা সমর্থিত (উত্পাদিত তালিকার অন্তর্ভুক্ত iconv -l)
  3. ইনপুট স্ট্রিংটি ইউটিএফ -8 এনকোডযুক্ত (পিএইচপি এর mb_check_encodingফাংশন ব্যবহার করে যাচাই করা হয়েছে , মরেটরের উত্তরে প্রস্তাবিত হিসাবে )
  4. কল setlocaleসফল হয়েছে (এটি 'en_US.utf8'পরিবর্তে ফিরে আসে FALSE)

সমস্যার কারণ:

সার্ভারটি আইকনভির ভুল প্রয়োগ ব্যবহার করছে। এটা আছে জন্য glibc সংস্করণ পরিবর্তে প্রয়োজনীয় libiconv সংস্করণ।

মনে রাখবেন যে কয়েকটি সিস্টেমের আইকনভিভ ফাংশনটি আপনার প্রত্যাশা মতো কাজ করতে পারে না। এই ক্ষেত্রে, জিএনইউ লাইবিকনভ লাইব্রেরি ইনস্টল করা ভাল ধারণা হবে। এটি সম্ভবত আরও ধারাবাহিক ফলাফলের সাথে শেষ হবে।
- পিএইচপি ম্যানুয়াল পরিচয় আইকনভি

পিএইচপি দ্বারা ব্যবহৃত আইকনভ বাস্তবায়ন সম্পর্কে বিশদটি phpinfoফাংশনের আউটপুটে অন্তর্ভুক্ত রয়েছে ।

(এই প্রকল্পের জন্য আমি যে সার্ভারের সাথে কাজ করছি তার সঠিক আইকনভি লাইব্রেরি দিয়ে আমি পিএইচপি পুনরায় সংকলন করতে পারছি না তাই আমি নীচে গ্রহণ করা উত্তরটি আইকনভি সমর্থন ব্যতীত অ্যাকসেন্টগুলি সরাতে সবচেয়ে কার্যকর ছিল for)


মনে রাখবেন যে আপনি যদি এএসসিআইআই হতে পারে না এমন স্ট্রিংটিতে এটি চালাচ্ছেন তবে এর নাটকীয় প্রভাব পড়বে। উদাহরণস্বরূপ কোনও রাশিয়ান স্ট্রিং ASCII এর সাথে কাজ করবে না।
ইভান

আমার কাছে গ্লিবিসি সংস্করণটি ইনস্টল এবং সেটিংটি আমার জন্য কাজ করে।

সুতরাং আপনি এটি সংকলন করতে হবে? আমি কোথাও কোনও ডেব প্যাকেজ খুঁজে পাচ্ছি না। ইতোমধ্যে
গ্লিবিসিতে

4
এই লোকটি এইচটিএমলেটিটিস () ব্যবহার করে একটি চতুর সমাধানের পরামর্শ দেয়। দুঃখিত এটা ফরাসি মধ্যে, কিন্তু আপনি শুধু ডক নীচে ছোট ফাংশন প্রয়োজন: weirdog.com/blog/php/... সত্যিই চতুর :)
JFG

4
@ জেএফজি কোন কোডটির কথা বলে তা দেখতে আপনি কীভাবে এটি দেখতে চান তা এখানে পেতে পারেন: github.com/ICanBoogie/Common/blob/…
মেমস

উত্তর:


7

আমি মনে করি যে এখানে সমস্যাটি হ'ল আপনার এনকোডিংগুলি a এবং å বিভিন্ন চিহ্নকে 'এ' হিসাবে বিবেচনা করে। প্রকৃতপক্ষে, স্ট্র্টের জন্য পিএইচপি ডকুমেন্টেশনটি কুৎসিতভাবে উচ্চারণগুলি সরানোর জন্য একটি নমুনা সরবরাহ করে :(

http://ie2.php.net/trtr


4
আমার মনে হয় এর পরিবর্তে আপনার সম্ভবত এমবি_ স্টারট্রার () পরামর্শ দেওয়া উচিত, কারণ তার ইনপুটটি ইউটিএফ 8
করিম 79৯

4
আইকনভিভ কলটিতে // ট্রান্সলিট মানে টার্গেট এনকোডিংয়ের নিকটতম উপলব্ধ বিকল্পে রূপান্তর করা। এর মধ্যে অ্যাকসেন্টগুলি অপসারণ করা, বা একটি একক চরিত্রকে দুটি রূপান্তর করা অন্তর্ভুক্ত করা উচিত, উদাহরণস্বরূপ ñ n হয়ে যেতে পারে
জর্জ ব্রক

যেহেতু সার্ভার আইকনভকে সঠিকভাবে সমর্থন করে না, দেখে মনে হচ্ছে আমি এটি এইভাবে এইভাবে করব। ধন্যবাদ জেরেমি
জর্জেব্রক

4
@ করিম 79 mb_strstrএটি ভুল ফাংশন, এবং এখানে নেইmb_strtr
ফিলিপ্রিও

96

ওয়ার্ডপ্রেস বাস্তবায়ন সম্পর্কে কি ?

function remove_accents($string) {
    if ( !preg_match('/[\x80-\xff]/', $string) )
        return $string;

    $chars = array(
    // Decompositions for Latin-1 Supplement
    chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
    chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
    chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
    chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
    chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
    chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
    chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
    chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
    chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
    chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
    chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
    chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
    chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
    chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
    chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
    chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
    chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
    chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
    chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
    chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
    chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
    chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
    chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
    chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
    chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
    chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
    chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
    chr(195).chr(191) => 'y',
    // Decompositions for Latin Extended-A
    chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
    chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
    chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
    chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
    chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
    chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
    chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
    chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
    chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
    chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
    chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
    chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
    chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
    chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
    chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
    chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
    chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
    chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
    chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
    chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
    chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
    chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
    chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
    chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
    chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
    chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
    chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
    chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
    chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
    chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
    chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
    chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
    chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
    chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
    chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
    chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
    chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
    chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
    chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
    chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
    chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
    chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
    chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
    chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
    chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
    chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
    chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
    chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
    chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
    chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
    chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
    chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
    chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
    chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
    chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
    chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
    chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
    chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
    chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
    chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
    chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
    chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
    chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
    chr(197).chr(190) => 'z', chr(197).chr(191) => 's'
    );

    $string = strtr($string, $chars);

    return $string;
}

এই ফাংশনটি কী করে তা আরও ভালভাবে বুঝতে, এখানে এই সম্পর্কিত রূপান্তর টেবিলটি পরীক্ষা করুন:

À => A
Á => A
 => A
à => A
Ä => A
Å => A
Ç => C
È => E
É => E
Ê => E
Ë => E
Ì => I
Í => I
Î => I
Ï => I
Ñ => N
Ò => O
Ó => O
Ô => O
Õ => O
Ö => O
Ù => U
Ú => U
Û => U
Ü => U
Ý => Y
ß => s
à => a
á => a
â => a
ã => a
ä => a
å => a
ç => c
è => e
é => e
ê => e
ë => e
ì => i
í => i
î => i
ï => i
ñ => n
ò => o
ó => o
ô => o
õ => o
ö => o
ù => u
ú => u
û => u
ü => u
ý => y
ÿ => y
Ā => A
ā => a
Ă => A
ă => a
Ą => A
ą => a
Ć => C
ć => c
Ĉ => C
ĉ => c
Ċ => C
ċ => c
Č => C
č => c
Ď => D
ď => d
Đ => D
đ => d
Ē => E
ē => e
Ĕ => E
ĕ => e
Ė => E
ė => e
Ę => E
ę => e
Ě => E
ě => e
Ĝ => G
ĝ => g
Ğ => G
ğ => g
Ġ => G
ġ => g
Ģ => G
ģ => g
Ĥ => H
ĥ => h
Ħ => H
ħ => h
Ĩ => I
ĩ => i
Ī => I
ī => i
Ĭ => I
ĭ => i
Į => I
į => i
İ => I
ı => i
IJ => IJ
ij => ij
Ĵ => J
ĵ => j
Ķ => K
ķ => k
ĸ => k
Ĺ => L
ĺ => l
Ļ => L
ļ => l
Ľ => L
ľ => l
Ŀ => L
ŀ => l
Ł => L
ł => l
Ń => N
ń => n
Ņ => N
ņ => n
Ň => N
ň => n
ʼn => N
Ŋ => n
ŋ => N
Ō => O
ō => o
Ŏ => O
ŏ => o
Ő => O
ő => o
Œ => OE
œ => oe
Ŕ => R
ŕ => r
Ŗ => R
ŗ => r
Ř => R
ř => r
Ś => S
ś => s
Ŝ => S
ŝ => s
Ş => S
ş => s
Š => S
š => s
Ţ => T
ţ => t
Ť => T
ť => t
Ŧ => T
ŧ => t
Ũ => U
ũ => u
Ū => U
ū => u
Ŭ => U
ŭ => u
Ů => U
ů => u
Ű => U
ű => u
Ų => U
ų => u
Ŵ => W
ŵ => w
Ŷ => Y
ŷ => y
Ÿ => Y
Ź => Z
ź => z
Ż => Z
ż => z
Ž => Z
ž => z
ſ => s

আপনি কেবল ফাংশনটির $charsঅ্যারের উপরে পুনরাবৃত্তি করে এই কনভেশন টেবিলটি নিজে তৈরি করতে পারেন :

foreach($chars as $k=>$v) {
   printf("%s -> %s", $k, $v);
}

4
খুব ভাল কাজ করে +1, লিংকটি নষ্ট হয়ে গেছে shame
ব্রিক

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, যেহেতু এটি হার্ড-কোডিং উচ্চারণযুক্ত অক্ষরের পরিবর্তে একটি নিরাপদ উপায়ে (chr () ফাংশন ব্যবহার করে) প্রয়োগ করা হয়েছিল, যা কিছু পাঠ্য-সম্পাদকের ক্ষেত্রে ওভাররাইট হয়ে যেতে পারে।
ম্লাদেন বি।

4
নোট করুন যে নতুন বাস্তবায়ন এখন এখানে অবস্থিত: core.trac.wordpress.org/browser/tags/4.1/src/wp-includes/… । কোডটির জন্য অন্যান্য ওয়ার্ডপ্রেস কোর সরবরাহ করা অন্যান্য ফাংশন প্রয়োজন, এবং কিছু (হালকা) কাজ ছাড়া অনুলিপি / পেস্ট করা যাবে না।
জুলিয়ান ফাস্ট্রি

4
মোহন হিসাবে কাজ করছেন, আপনাকে ধন্যবাদ!
সালভি পাসকুয়াল

4
এটি লক্ষ করা উচিত যে ওয়ার্ডপ্রেসটি জিপিএলভি 2 লাইসেন্সযুক্ত।
ডায়োগো কলারস

47

এটি কোডের একটি অংশ যা আমি খুঁজে পেয়েছি এবং প্রায়শই ব্যবহার করি:

function stripAccents($stripAccents){
  return strtr($stripAccents,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

13
যেমন strtr()মাল্টিবাইট সচেতন নয়, যদি আপনার স্ক্রিপ্ট ফাইলটি মাল্টিবাইট বিন্যাসে এনকোড করা থাকে (যেমন ইউটিএফ -8) এই ফাংশনটি ভুল ফলাফল দেয়।
গ্রাস ডাবল

সত্য। আমি গিথুব প্রকল্পটি কেবলমাত্র একটি একক লাইন সম্পাদন করার জন্য তৈরি করতে চেষ্টা করেছি, এমনকি উচ্চারণযুক্ত অক্ষরের সাথেও সম্পর্কিত নয়, তবে আমি যখন পরিবর্তনগুলি সংরক্ষণ করেছি এবং একটি টান অনুরোধ তৈরি করেছি, এতে অক্ষরযুক্ত অক্ষরযুক্ত উচ্চারণযুক্ত সমস্ত লাইনে অতিরিক্ত পরিবর্তন অন্তর্ভুক্ত ছিল। নিরাপদ উপায় হল chr () ব্যবহার করা।
ম্লাদেন বি।

4
... অতিরিক্ত - এই তালিকায় অনেকů, ž, ř, č, ...
উচ্চারণযুক্ত

সিয়োর, বিজার্ক , etc. ইত্যাদি list এটি এমন একটি তালিকা যা এখানে এখনকার চেয়ে অনেক বেশি দীর্ঘ।
tadman

43

জিনো পোস্ট করেছেন উপরে সাধারণ ফাংশনটির ইউটিএফ -8 বান্ধব সংস্করণ:

function stripAccents($str) {
    return strtr(utf8_decode($str), utf8_decode('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ'), 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

এটিতে আসতে হয়েছিল কারণ আমার পিএইচপি নথিটি ইউটিএফ -8 এনকোডযুক্ত ছিল।

আশা করি এটা সাহায্য করবে.


ইউটিএফ 8-র কিছু অক্ষর আমার এই ফাংশনটি ব্যবহার করে সঠিকভাবে কাজ করে না। আমি বিশ্বাস করি এটি ইউটিএফ 8 থেকে আইএসও -8859-1 তে রূপান্তরকারী utf8_decode () এর কারণে।
ট্রেভর গেহমান

@ ট্রেভর-গেহম্যান: স্ট্র্ট () কেবলমাত্র একক-বাইট অক্ষরগুলিতে কাজ করে, সুতরাং ইউনিকোড ল্যাটিন -১ পরিপূরকগুলিতে ।
ক্রিসভি

4
Strtr মাল্টি বাইট UTF8 টি অক্ষর প্রতিস্থাপনের জন্য সূক্ষ্মভাবে কাজ করে, তবে আপনাকে দ্বিতীয় যুক্তি হিসাবে কোনও এসোসিয়েটিভ অ্যারে সরবরাহ করার ক্ষেত্রে ভেরিয়েন্টটি ব্যবহার করতে হবে। তারপরে আপনার সেই অ্যারের যে কোনও অবস্থানে কী বা মান হিসাবে একাধিক বাইট অক্ষর থাকতে পারে। আপনার পাঠ্য সম্পাদকটি ইউটিএফ 8 মোডে আছে কিনা তা নিশ্চিত করুন বা "\ xc2 \ x81" টাইপ বাক্য গঠন ব্যবহার করে এনকোড করুন।
থোমাসরুটটার

এটি একটি খুব অসম্পূর্ণ বাস্তবায়ন, জন আর এর উত্তর দেখুন
ব্যবহারকারী 151496

20

আপনার যদি http://php.net/manual/en/book.intl.php উপলব্ধ থাকে তবে এটি আপনার সমস্যার সমাধান করে

$string = "Fóø Bår";
$transliterator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD);
echo $normalized = $transliterator->transliterate($string);

Lower()এই ক্ষেত্রে প্রয়োজন হয় না
শুকনো

এই লিঙ্কগুলি নিয়মগুলি নির্ধারণে এবং এনএফডি এবং এনএফসি এর অর্থ কী তা বুঝতে সহায়তা করতে পারে: আইসিইউ ব্যবহারকারী গাইড এবং ইউনিকোড নর্ম ফর্মগুলি
জেডজিডিয়াড

4
আমি এই পৃষ্ঠাটি কয়েক ডজন বার পড়েছি এবং আজ অবধি কোনওভাবেই এই উত্তরটি মিস করেছি যা নিখুঁত!
নিয়াভলিস

4
বিশ্বাস করা যায় না যে সর্বাধিক উত্সাহিত উত্তরগুলি হার্ডকোডিং চরিত্রের মানচিত্র সম্পর্কে। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
বেনিয়ামিন

এই উত্তরটি আমাকে আমার প্রয়োজনের সঠিক সমাধানে নিয়ে গেছে। এখানকার নিয়মগুলি খুব শক্ত, আমি ':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;'
উচ্চারণগুলি

16

সবচেয়ে সহজ উপায় iconv()পিএইচপি নেটিভ ফাংশন ব্যবহার করা ।

 echo iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', "Thîs îs à vêry wrong séntènce!");

 // output: This is a very wrong sentence!

4
এই খুব নির্ভরযোগ্য echo iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', 'usuario o contraseña incorrectos');আউটপুটusuario o contrase?a incorrectos
স্ট্যান

4
আপনার উদাহরণস্বরূপ, আপনি ব্যবহার করতে পারে: setlocale(LC_CTYPE, 'cs_CZ'); echo iconv('UTF-8', 'ASCII//TRANSLIT', "usuario o contraseña incorrectos"); // output: usuario o contrasena incorrectos। আরও তথ্যের জন্য দয়া করে পিএইচপি ডকুমেন্টেশন দেখুন। সব আছে! php.net/manual/en/function.iconv.php
ওয়াইলাইল করিম

4
আইসিএনভি ইউটিএফ 8 থেকে এএসসিআইআই ট্রান্সলিটেশন খুব অদ্ভুত বলে মনে হচ্ছে। আমি আমার লোকেলের জন্য "ইউজারিও ও কনট্রাসে incor না ভুল" পেয়েছি। এটি ñ থেকে ~ n এবং ö এর মতো জিনিসে রূপান্তরিত করে: o আমি দেখতে পেয়েছি যে ল্যাটিন 1 তে লিখিতভাবে লিখিত রূপান্তরিত তারপর বর্ধিত আসকি ম্যানুয়ালি রূপান্তর করা ভালভাবে কাজ করে।
ফিল

@ ফিল_1984_ আপনার লোকেল কী?
এমপেন

@ মার্ক ঠিক বুঝতে পেরেছিল যে আমার সেটলোকেল কমান্ডটি আমার উইন্ডোজটিতে মিথ্যা ফিরছে। এটি "en_UK" ব্যবহার করা উচিত। আমার আইকনভের সাথে একটি উইন্ডোজ বাগ থাকতে পারে।
ফিল

15

ব্যবহার করার সময় iconv, প্যারামিটার লোকেল সেট করা আবশ্যক:

function test_enc($text = 'ěščřžýáíé ĚŠČŘŽÝÁÍÉ fóø bår FÓØ BÅR æ')
{
    echo '<tt>';
    echo iconv('utf8', 'ascii//TRANSLIT', $text);
    echo '</tt><br/>';
} 

test_enc();
setlocale(LC_ALL, 'cs_CZ.utf8');
test_enc();
setlocale(LC_ALL, 'en_US.utf8');
test_enc();

এতে ফলন:

????????? ????????? f?? b?r F?? B?R ae
escrzyaie ESCRZYAIE fo? bar FO? BAR ae
escrzyaie ESCRZYAIE fo? bar FO? BAR ae

এরপরে আর একটি লোকেল সিএস_সিজেড এবং এন_ ইউএস আমি ইনস্টল করি নি এবং আমি এটি পরীক্ষা করতে পারি না।

সি # তে আমি ইউনিকোডকে নরমালাইজড ফর্মটিতে অনুবাদ ব্যবহার করে সমাধানটি দেখি - অ্যাকসেন্টগুলি বিভক্ত হয় এবং তারপরে ইউনিকোড বিভাগে ননস্পেসিংয়ের মাধ্যমে ফিল্টার করা হয়।


8

নিশ্চয়ই স্বাদের বিষয়। এই জাতীয় অক্ষর রূপান্তর করার জন্য অনেক স্বাদ রয়েছে।

function replaceAccents($str)
{
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ');
  $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
  return str_replace($a, $b, $str);
}

এটি একটি খুব অসম্পূর্ণ বাস্তবায়ন, জন আর এর উত্তর দেখুন
ব্যবহারকারী 151496

6

এখানে একটি সাধারণ ফাংশন যা আমি সাধারণত অ্যাকসেন্টগুলি সরাতে ব্যবহার করি:

function str_without_accents($str, $charset='utf-8')
{
    $str = htmlentities($str, ENT_NOQUOTES, $charset);

    $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères

    return $str;   // or add this : mb_strtoupper($str); for uppercase :)
}

এটি খুব ভবিষ্যতের প্রমাণ বলে মনে হয় না। যদি ভবিষ্যতে আরও এইচটিএমএল সত্তা বরাদ্দ করা হয় তবে তারা কাকতালীয়ভাবে আপনার রেজেক্সের সাথে মেলে (উদাহরণস্বরূপ প্রচুর শব্দ "রিং" এ শেষ হয়)।
equin0x80

5

আপনি urlencode ব্যবহার করতে পারে। আপনি যা চান তা পুরোপুরি করে না (অ্যাকসেন্টগুলি সরিয়ে ফেলুন), তবে আপনাকে একটি ইউআরএল ব্যবহারযোগ্য স্ট্রিং দেবে

$output = urlencode ($input);

পার্লে আমি একটি অনুবাদক রেজেক্স ব্যবহার করতে পারি, তবে আমি পিএইচপি সমতুল্যর কথা ভাবতে পারি না

$input =~ tr/áâàå/aaaa/;

ইত্যাদি ...

আপনি preg_replace ব্যবহার করে এটি করতে পারেন

$patterns[0] = '/[á|â|à|å|ä]/';
$patterns[1] = '/[ð|é|ê|è|ë]/';
$patterns[2] = '/[í|î|ì|ï]/';
$patterns[3] = '/[ó|ô|ò|ø|õ|ö]/';
$patterns[4] = '/[ú|û|ù|ü]/';
$patterns[5] = '/æ/';
$patterns[6] = '/ç/';
$patterns[7] = '/ß/';
$replacements[0] = 'a';
$replacements[1] = 'e';
$replacements[2] = 'i';
$replacements[3] = 'o';
$replacements[4] = 'u';
$replacements[5] = 'ae';
$replacements[6] = 'c';
$replacements[7] = 'ss';

$output = preg_replace($patterns, $replacements, $input);

(দয়া করে নোট করুন এটি শুক্রবার দুপুরের স্মৃতিচারণের পরে শুকিয়ে যাওয়া একটি কুয়াশা বিয়ার থেকে টাইপ করা হয়েছিল, সুতরাং এটি 100% সঠিক নাও হতে পারে)

অথবা আপনি একটি হ্যাশ টেবিল তৈরি করতে পারেন এবং এর ভিত্তিতে একটি প্রতিস্থাপন করতে পারেন।


4
এর পিএইচপি সমতুল্য TR / ... / ... হয় strtr
instanceof আমাকে

3

আমি এই থ্রেড এবং এই অন্যটি পড়ার উপর ভিত্তি করে সবেমাত্র একটি সরানোর পদ্ধতিসমূহ তৈরি করেছি ( উচ্চারণগুলি কীভাবে সরানো যায় এবং অক্ষরগুলিকে "সরল" এএসসিআইআই অক্ষরে রূপান্তর করা যায়? )

পদ্ধতিটি এখানে: https://github.com/lingtalfi/Bat/blob/master/StringTool.md#removeaccents

টেস্টগুলি এখানে রয়েছে: https://github.com/lingtalfi/Bat/blob/master/btests/StringTool/removeAccents/stringTool.removeAccents.test.php ,

এবং এখন পর্যন্ত যা পরীক্ষা করা হয়েছিল তা এখানে:

$a = [
    // easy
    '',
    'a',
    'après',
    'dédé fait la fête ?',
    // hard
    'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
    'ŻŹĆŃĄŚŁĘÓżźćńąśłęó',
    'qqqqŻŹĆŃĄŚŁĘÓżźćńąśłęóqqq',
    'ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöøùúûüýÿ',       
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ',
    'ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİĴĵĶķ',
    'ĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž',
    'ſƒƠơƯưǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǺǻǾǿ',
    'Ǽǽ',
];

এবং এটি কেবল উচ্চারণকৃত জিনিসগুলিতে রূপান্তর করে (অক্ষর / লিগাচার / সিডিলিস / / / এর মাধ্যমে একটি লাইন সহ কিছু অক্ষর)?

এখানে পদ্ধতির বিষয়বস্তু: ( https://github.com/lingtalfi/Bat/blob/master/StringTool.php#L83 )

public static function removeAccents($str)
{
    static $map = [
        // single letters
        'à' => 'a',
        'á' => 'a',
        'â' => 'a',
        'ã' => 'a',
        'ä' => 'a',
        'ą' => 'a',
        'å' => 'a',
        'ā' => 'a',
        'ă' => 'a',
        'ǎ' => 'a',
        'ǻ' => 'a',
        'À' => 'A',
        'Á' => 'A',
        'Â' => 'A',
        'Ã' => 'A',
        'Ä' => 'A',
        'Ą' => 'A',
        'Å' => 'A',
        'Ā' => 'A',
        'Ă' => 'A',
        'Ǎ' => 'A',
        'Ǻ' => 'A',


        'ç' => 'c',
        'ć' => 'c',
        'ĉ' => 'c',
        'ċ' => 'c',
        'č' => 'c',
        'Ç' => 'C',
        'Ć' => 'C',
        'Ĉ' => 'C',
        'Ċ' => 'C',
        'Č' => 'C',

        'ď' => 'd',
        'đ' => 'd',
        'Ð' => 'D',
        'Ď' => 'D',
        'Đ' => 'D',


        'è' => 'e',
        'é' => 'e',
        'ê' => 'e',
        'ë' => 'e',
        'ę' => 'e',
        'ē' => 'e',
        'ĕ' => 'e',
        'ė' => 'e',
        'ě' => 'e',
        'È' => 'E',
        'É' => 'E',
        'Ê' => 'E',
        'Ë' => 'E',
        'Ę' => 'E',
        'Ē' => 'E',
        'Ĕ' => 'E',
        'Ė' => 'E',
        'Ě' => 'E',

        'ƒ' => 'f',


        'ĝ' => 'g',
        'ğ' => 'g',
        'ġ' => 'g',
        'ģ' => 'g',
        'Ĝ' => 'G',
        'Ğ' => 'G',
        'Ġ' => 'G',
        'Ģ' => 'G',


        'ĥ' => 'h',
        'ħ' => 'h',
        'Ĥ' => 'H',
        'Ħ' => 'H',

        'ì' => 'i',
        'í' => 'i',
        'î' => 'i',
        'ï' => 'i',
        'ĩ' => 'i',
        'ī' => 'i',
        'ĭ' => 'i',
        'į' => 'i',
        'ſ' => 'i',
        'ǐ' => 'i',
        'Ì' => 'I',
        'Í' => 'I',
        'Î' => 'I',
        'Ï' => 'I',
        'Ĩ' => 'I',
        'Ī' => 'I',
        'Ĭ' => 'I',
        'Į' => 'I',
        'İ' => 'I',
        'Ǐ' => 'I',

        'ĵ' => 'j',
        'Ĵ' => 'J',

        'ķ' => 'k',
        'Ķ' => 'K',


        'ł' => 'l',
        'ĺ' => 'l',
        'ļ' => 'l',
        'ľ' => 'l',
        'ŀ' => 'l',
        'Ł' => 'L',
        'Ĺ' => 'L',
        'Ļ' => 'L',
        'Ľ' => 'L',
        'Ŀ' => 'L',


        'ñ' => 'n',
        'ń' => 'n',
        'ņ' => 'n',
        'ň' => 'n',
        'ʼn' => 'n',
        'Ñ' => 'N',
        'Ń' => 'N',
        'Ņ' => 'N',
        'Ň' => 'N',

        'ò' => 'o',
        'ó' => 'o',
        'ô' => 'o',
        'õ' => 'o',
        'ö' => 'o',
        'ð' => 'o',
        'ø' => 'o',
        'ō' => 'o',
        'ŏ' => 'o',
        'ő' => 'o',
        'ơ' => 'o',
        'ǒ' => 'o',
        'ǿ' => 'o',
        'Ò' => 'O',
        'Ó' => 'O',
        'Ô' => 'O',
        'Õ' => 'O',
        'Ö' => 'O',
        'Ø' => 'O',
        'Ō' => 'O',
        'Ŏ' => 'O',
        'Ő' => 'O',
        'Ơ' => 'O',
        'Ǒ' => 'O',
        'Ǿ' => 'O',


        'ŕ' => 'r',
        'ŗ' => 'r',
        'ř' => 'r',
        'Ŕ' => 'R',
        'Ŗ' => 'R',
        'Ř' => 'R',


        'ś' => 's',
        'š' => 's',
        'ŝ' => 's',
        'ş' => 's',
        'Ś' => 'S',
        'Š' => 'S',
        'Ŝ' => 'S',
        'Ş' => 'S',

        'ţ' => 't',
        'ť' => 't',
        'ŧ' => 't',
        'Ţ' => 'T',
        'Ť' => 'T',
        'Ŧ' => 'T',


        'ù' => 'u',
        'ú' => 'u',
        'û' => 'u',
        'ü' => 'u',
        'ũ' => 'u',
        'ū' => 'u',
        'ŭ' => 'u',
        'ů' => 'u',
        'ű' => 'u',
        'ų' => 'u',
        'ư' => 'u',
        'ǔ' => 'u',
        'ǖ' => 'u',
        'ǘ' => 'u',
        'ǚ' => 'u',
        'ǜ' => 'u',
        'Ù' => 'U',
        'Ú' => 'U',
        'Û' => 'U',
        'Ü' => 'U',
        'Ũ' => 'U',
        'Ū' => 'U',
        'Ŭ' => 'U',
        'Ů' => 'U',
        'Ű' => 'U',
        'Ų' => 'U',
        'Ư' => 'U',
        'Ǔ' => 'U',
        'Ǖ' => 'U',
        'Ǘ' => 'U',
        'Ǚ' => 'U',
        'Ǜ' => 'U',


        'ŵ' => 'w',
        'Ŵ' => 'W',

        'ý' => 'y',
        'ÿ' => 'y',
        'ŷ' => 'y',
        'Ý' => 'Y',
        'Ÿ' => 'Y',
        'Ŷ' => 'Y',

        'ż' => 'z',
        'ź' => 'z',
        'ž' => 'z',
        'Ż' => 'Z',
        'Ź' => 'Z',
        'Ž' => 'Z',


        // accentuated ligatures
        'Ǽ' => 'A',
        'ǽ' => 'a',
    ];
    return strtr($str, $map);
}

2

আমি জর্জব্রোকের মন্তব্যের সাথে একমত

যদি আপনি // ট্রান্সলিট কাজ করার কোনও উপায় খুঁজে পান তবে আপনি বন্ধুত্বপূর্ণ ইউআরএল তৈরি করতে পারেন:

  1. // ট্রান্সলিট icon => n with সহ আইকনভি ব্যবহার করুন ~
    • শব্দের ভিতরে অক্ষরে অক্ষরহীন অক্ষরযুক্ত অক্ষর মুছুন: $url = preg_replace( '/(\w)[^\w\s](\w)/', '$1$2', $url );
    • অবশিষ্ট বিচ্ছেদ প্রতিস্থাপন: $url = preg_replace( '/[^a-z0-9]+/', '-', $url );
    • ডাবল / শীর্ষস্থানীয় / ট্রলিং অপসারণ: $url = preg_replace( '-'যেমন'/(?:(^|\-)\-+|\-$)/', '', $url );

আপনি যদি এটি কাজ করতে না পারেন তবে সেটটি 1 টি স্ট্রিট / অক্ষর-ভিত্তিক প্রতিস্থাপনের সাথে এক্সটিয়াসের সমাধান হিসাবে প্রতিস্থাপন করুন।


2

আমি আপনার সমস্যার পুনরুত্পাদন করতে পারি না আমি প্রত্যাশিত ফলাফল পেতে।

mb_detect_encoding()আপনার স্ট্রিংটি ইউটিএফ -8 আসলে যাচাই করতে আপনি কীভাবে ব্যবহার করছেন ?

যদি আমি কেবল mb_detect_encoding($input)আপনার স্ট্রিংয়ের একটি ইউটিএফ -8 এবং আইএসও -8859-1 এনকোডড সংস্করণ উভয়কে কল করি তবে উভয়ই "ইউটিএফ -8" প্রত্যাবর্তন করে, যাতে সেই ফাংশনটি বিশেষভাবে নির্ভরযোগ্য নয়।

iconv() এটি একটি পিএইচপি "নোটিশ" দেয় যখন এটি ভুলভাবে এনকোডড স্ট্রিংটি পায় এবং কেবল "এফ" প্রতিধ্বনিত করে, তবে এটি কেবল আলাদা পিএইচপি / আইকনভি সেটিংস / সংস্করণগুলির (?) এর কারণে হতে পারে।

আমি আপনাকে পরামর্শ দিচ্ছি mb_check_encoding($input, "utf-8")যে আপনার স্ট্রিংটি যাচাই করতে প্রথমে কল করার চেষ্টা করুন সত্যই ইউটিএফ -8 ।আমি মনে করি এটি সম্ভবত না।


বখশিশের জন্য ধন্যবাদ. mb_check_encoding ($ ইনপুট, "utf-8") সত্য ফিরে আসছে। এছাড়াও, আমি ইতিমধ্যে ত্রুটি_বন্দর (E_ALL) ব্যবহার করছিলাম যাতে আমার পিছনে পিছনে কোনও ত্রুটি না ঘটে।
জর্জেব্রক

হুঁ, আমি তোমার কথা দেখছি আমি এখন এটি অন্য মেশিনে চেষ্টা করেছি এবং এটি "ফো? বার" ফিরে আসে। আপনি কোন পিএইচপি এবং আইকনভি সংস্করণ ব্যবহার করছেন?
মার্ডেটার

4
আমি মনে করি এটি আইকনভি সংস্করণ যা ত্রুটিযুক্ত - এই সার্ভারটি লিবিকনভ সংস্করণের পরিবর্তে গ্লিবিক সংস্করণ ব্যবহার করছে।
জর্জেব্রক

ধন্যবাদ মারেটার, আপনি সত্যিই সহায়ক ছিল।
জর্জেব্রক

আপনার ব্যাখ্যার জন্য ধন্যবাদ। আমি বুঝতে পারিনি এটি কেবল সংস্করণ সংখ্যা নয়। আমার শেষের পার্থক্যটি বিভিন্ন আইকনভ ইমপ্লান্টেশনের কারণেও হয়েছিল।
মার্ডেটার

2

আপনার কয়েকজনের জন্য কিছুটা সময় সাশ্রয় করার আশায় জুনিয়র মেহির চর তালিকাটি দিয়ে কাজাজুমা নিই ক্যাভালকান্তির বাস্তবায়নটি মার্জ করা হয়েছে।

function stripAccents($str) {
    return strtr(utf8_decode($str), utf8_decode('ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïñòóôõöøùúûüýÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƒƠơƯưǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǺǻǼǽǾǿ'), 'AAAAAAAECEEEEIIIIDNOOOOOOUUUUYsaaaaaaaeceeeeiiiinoooooouuuuyyAaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIiIJijJjKkLlLlLlLlllNnNnNnnOoOoOoOEoeRrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZzsfOoUuAaIiOoUuUuUuUuUuAaAEaeOo');
}

4
আপনি utf8_decode অ ল্যাটিন 1 অক্ষরগুলির চেষ্টা করছেন যা আপনাকে 'ফিরিয়ে দেবে?' চরিত্র এছাড়াও আপনার স্ট্রিংগুলি বিভিন্ন দৈর্ঘ্যের কারণ Ǽ থেকে AE রূপান্তর। এই পদ্ধতি কাজ করবে না।
ফিল

2

লারাভেলে আপনি সহজেই ব্যবহার করতে পারেন str_slug($accentedPhrase) এবং যদি আপনি ড্যাশ (-) এর বিষয়ে যত্নশীল হন তবে এই পদ্ধতিটি আপনি যে জায়গাতে ব্যবহার করতে পারেন তার বিকল্প রয়েছেstr_replace('-', ' ', str_slug($accentedPhrase))


4
আপনার প্রতিস্থাপনটি ব্যবহার করার দরকার নেই, আপনি ফাঁকা স্ট্রিংয়ে সেকেন্ড আর্গুমেন্ট সেট করতে পারেনstr_slug($word, ' ');
পেটিআর

1

এটার মতো কিছু?

$arrSearch  = explode(","," ,ç,æ, œ, á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");

$arrReplace = explode(",","_,c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");

$output = str_replace($arrSearch, $arrReplace, $input);

1

যদি প্রধান কাজটি কেবল একটি ইউআরএল-এ স্ট্রিং ব্যবহার করা হয় তবে স্লগইফায়ার ব্যবহার করবেন না কেন ?

composer require cocur/slugify

তারপর

use Cocur\Slugify\Slugify;

$slugify = new Slugify();
echo $slugify->slugify('Fóø Bår');

জনপ্রিয় ফ্রেমওয়ার্কগুলির জন্য এটিতে অনেকগুলি সেতু রয়েছে। যেমন আপনি মতবাদ এক্সটেনশনগুলি স্লোগেবল ব্যবহার করতে পারেন ডিবিতে প্রতিটি সত্তার জন্য স্বয়ংক্রিয়ভাবে অনন্য স্লাগ তৈরি করতে এবং এটি ব্যবহার করতে আচরণ ।

আপনি যদি সমস্ত অ্যাকসেন্ট মুছতে চান তবে প্রয়োজনীয়তাগুলি পূরণ করার জন্য আপনি নিয়মসেটগুলি সহ খেলতে পারেন ।


0

আপনি ইউটিএফ -8 অক্ষরের জন্য মাল্টি-বাইট হলেও নিরাপদে strtr () ব্যবহার করে একটি অ্যারের কী => মান শৈলী ব্যবহার করতে পারেন।

function no_accent($str){
    $accents = array('À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'Ā' => 'A', 'ā' => 'a', 'Ă' => 'A', 'ă' => 'a', 'Ą' => 'A', 'ą' => 'a', 'Ç' => 'C', 'ç' => 'c', 'Ć' => 'C', 'ć' => 'c', 'Ĉ' => 'C', 'ĉ' => 'c', 'Ċ' => 'C', 'ċ' => 'c', 'Č' => 'C', 'č' => 'c', 'Ð' => 'D', 'ð' => 'd', 'Ď' => 'D', 'ď' => 'd', 'Đ' => 'D', 'đ' => 'd', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'Ē' => 'E', 'ē' => 'e', 'Ĕ' => 'E', 'ĕ' => 'e', 'Ė' => 'E', 'ė' => 'e', 'Ę' => 'E', 'ę' => 'e', 'Ě' => 'E', 'ě' => 'e', 'Ĝ' => 'G', 'ĝ' => 'g', 'Ğ' => 'G', 'ğ' => 'g', 'Ġ' => 'G', 'ġ' => 'g', 'Ģ' => 'G', 'ģ' => 'g', 'Ĥ' => 'H', 'ĥ' => 'h', 'Ħ' => 'H', 'ħ' => 'h', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'Ĩ' => 'I', 'ĩ' => 'i', 'Ī' => 'I', 'ī' => 'i', 'Ĭ' => 'I', 'ĭ' => 'i', 'Į' => 'I', 'į' => 'i', 'İ' => 'I', 'ı' => 'i', 'Ĵ' => 'J', 'ĵ' => 'j', 'Ķ' => 'K', 'ķ' => 'k', 'ĸ' => 'k', 'Ĺ' => 'L', 'ĺ' => 'l', 'Ļ' => 'L', 'ļ' => 'l', 'Ľ' => 'L', 'ľ' => 'l', 'Ŀ' => 'L', 'ŀ' => 'l', 'Ł' => 'L', 'ł' => 'l', 'Ñ' => 'N', 'ñ' => 'n', 'Ń' => 'N', 'ń' => 'n', 'Ņ' => 'N', 'ņ' => 'n', 'Ň' => 'N', 'ň' => 'n', 'ʼn' => 'n', 'Ŋ' => 'N', 'ŋ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'Ō' => 'O', 'ō' => 'o', 'Ŏ' => 'O', 'ŏ' => 'o', 'Ő' => 'O', 'ő' => 'o', 'Ŕ' => 'R', 'ŕ' => 'r', 'Ŗ' => 'R', 'ŗ' => 'r', 'Ř' => 'R', 'ř' => 'r', 'Ś' => 'S', 'ś' => 's', 'Ŝ' => 'S', 'ŝ' => 's', 'Ş' => 'S', 'ş' => 's', 'Š' => 'S', 'š' => 's', 'ſ' => 's', 'Ţ' => 'T', 'ţ' => 't', 'Ť' => 'T', 'ť' => 't', 'Ŧ' => 'T', 'ŧ' => 't', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'Ũ' => 'U', 'ũ' => 'u', 'Ū' => 'U', 'ū' => 'u', 'Ŭ' => 'U', 'ŭ' => 'u', 'Ů' => 'U', 'ů' => 'u', 'Ű' => 'U', 'ű' => 'u', 'Ų' => 'U', 'ų' => 'u', 'Ŵ' => 'W', 'ŵ' => 'w', 'Ý' => 'Y', 'ý' => 'y', 'ÿ' => 'y', 'Ŷ' => 'Y', 'ŷ' => 'y', 'Ÿ' => 'Y', 'Ź' => 'Z', 'ź' => 'z', 'Ż' => 'Z', 'ż' => 'z', 'Ž' => 'Z', 'ž' => 'z');
    return strtr($str, $accents);
}

এছাড়াও, আপনি ইউটিএফ -8 অংশে ডিকোড / এনকোড সংরক্ষণ করুন।


0

remove_accents()শেষ সংস্করণ ওয়ার্ডপ্রেস 4.3 ফর্ম্যাট অনুযায়ী ফাংশনের একটি উন্নত সংস্করণ হ'ল:

function mbstring_binary_safe_encoding( $reset = false ) {
    static $encodings = array();
    static $overloaded = null;

    if ( is_null( $overloaded ) )
        $overloaded = function_exists( 'mb_internal_encoding' ) && ( ini_get( 'mbstring.func_overload' ) & 2 );

    if ( false === $overloaded )
        return;

    if ( ! $reset ) {
        $encoding = mb_internal_encoding();
        array_push( $encodings, $encoding );
        mb_internal_encoding( 'ISO-8859-1' );
    }

    if ( $reset && $encodings ) {
        $encoding = array_pop( $encodings );
        mb_internal_encoding( $encoding );
    }
}

function reset_mbstring_encoding() {
    mbstring_binary_safe_encoding( true );
}

function seems_utf8( $str ) {
    mbstring_binary_safe_encoding();
    $length = strlen($str);
    reset_mbstring_encoding();
    for ($i=0; $i < $length; $i++) {
        $c = ord($str[$i]);
        if ($c < 0x80) $n = 0; // 0bbbbbbb
        elseif (($c & 0xE0) == 0xC0) $n=1; // 110bbbbb
        elseif (($c & 0xF0) == 0xE0) $n=2; // 1110bbbb
        elseif (($c & 0xF8) == 0xF0) $n=3; // 11110bbb
        elseif (($c & 0xFC) == 0xF8) $n=4; // 111110bb
        elseif (($c & 0xFE) == 0xFC) $n=5; // 1111110b
        else return false; // Does not match any model
        for ($j=0; $j<$n; $j++) { // n bytes matching 10bbbbbb follow ?
            if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80))
                return false;
        }
    }
    return true;
}

function remove_accents( $string ) {
    if ( !preg_match('/[\x80-\xff]/', $string) )
        return $string;

    if (seems_utf8($string)) {
        $chars = array(
            // Decompositions for Latin-1 Supplement
            chr(194).chr(170) => 'a', chr(194).chr(186) => 'o',
            chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
            chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
            chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
            chr(195).chr(134) => 'AE',chr(195).chr(135) => 'C',
            chr(195).chr(136) => 'E', chr(195).chr(137) => 'E',
            chr(195).chr(138) => 'E', chr(195).chr(139) => 'E',
            chr(195).chr(140) => 'I', chr(195).chr(141) => 'I',
            chr(195).chr(142) => 'I', chr(195).chr(143) => 'I',
            chr(195).chr(144) => 'D', chr(195).chr(145) => 'N',
            chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
            chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
            chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
            chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
            chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
            chr(195).chr(158) => 'TH',chr(195).chr(159) => 's',
            chr(195).chr(160) => 'a', chr(195).chr(161) => 'a',
            chr(195).chr(162) => 'a', chr(195).chr(163) => 'a',
            chr(195).chr(164) => 'a', chr(195).chr(165) => 'a',
            chr(195).chr(166) => 'ae',chr(195).chr(167) => 'c',
            chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
            chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
            chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
            chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
            chr(195).chr(176) => 'd', chr(195).chr(177) => 'n',
            chr(195).chr(178) => 'o', chr(195).chr(179) => 'o',
            chr(195).chr(180) => 'o', chr(195).chr(181) => 'o',
            chr(195).chr(182) => 'o', chr(195).chr(184) => 'o',
            chr(195).chr(185) => 'u', chr(195).chr(186) => 'u',
            chr(195).chr(187) => 'u', chr(195).chr(188) => 'u',
            chr(195).chr(189) => 'y', chr(195).chr(190) => 'th',
            chr(195).chr(191) => 'y', chr(195).chr(152) => 'O',
            // Decompositions for Latin Extended-A
            chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
            chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
            chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
            chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
            chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
            chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
            chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
            chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
            chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
            chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
            chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
            chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
            chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
            chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
            chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
            chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
            chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
            chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
            chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
            chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
            chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
            chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
            chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
            chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
            chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
            chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
            chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
            chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
            chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
            chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
            chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
            chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
            chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
            chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
            chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
            chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
            chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
            chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
            chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
            chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
            chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
            chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
            chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
            chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
            chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
            chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
            chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
            chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
            chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
            chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
            chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
            chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
            chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
            chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
            chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
            chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
            chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
            chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
            chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
            chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
            chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
            chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
            chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
            chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
            // Decompositions for Latin Extended-B
            chr(200).chr(152) => 'S', chr(200).chr(153) => 's',
            chr(200).chr(154) => 'T', chr(200).chr(155) => 't',
            // Euro Sign
            chr(226).chr(130).chr(172) => 'E',
            // GBP (Pound) Sign
            chr(194).chr(163) => '',
            // Vowels with diacritic (Vietnamese)
            // unmarked
            chr(198).chr(160) => 'O', chr(198).chr(161) => 'o',
            chr(198).chr(175) => 'U', chr(198).chr(176) => 'u',
            // grave accent
            chr(225).chr(186).chr(166) => 'A', chr(225).chr(186).chr(167) => 'a',
            chr(225).chr(186).chr(176) => 'A', chr(225).chr(186).chr(177) => 'a',
            chr(225).chr(187).chr(128) => 'E', chr(225).chr(187).chr(129) => 'e',
            chr(225).chr(187).chr(146) => 'O', chr(225).chr(187).chr(147) => 'o',
            chr(225).chr(187).chr(156) => 'O', chr(225).chr(187).chr(157) => 'o',
            chr(225).chr(187).chr(170) => 'U', chr(225).chr(187).chr(171) => 'u',
            chr(225).chr(187).chr(178) => 'Y', chr(225).chr(187).chr(179) => 'y',
            // hook
            chr(225).chr(186).chr(162) => 'A', chr(225).chr(186).chr(163) => 'a',
            chr(225).chr(186).chr(168) => 'A', chr(225).chr(186).chr(169) => 'a',
            chr(225).chr(186).chr(178) => 'A', chr(225).chr(186).chr(179) => 'a',
            chr(225).chr(186).chr(186) => 'E', chr(225).chr(186).chr(187) => 'e',
            chr(225).chr(187).chr(130) => 'E', chr(225).chr(187).chr(131) => 'e',
            chr(225).chr(187).chr(136) => 'I', chr(225).chr(187).chr(137) => 'i',
            chr(225).chr(187).chr(142) => 'O', chr(225).chr(187).chr(143) => 'o',
            chr(225).chr(187).chr(148) => 'O', chr(225).chr(187).chr(149) => 'o',
            chr(225).chr(187).chr(158) => 'O', chr(225).chr(187).chr(159) => 'o',
            chr(225).chr(187).chr(166) => 'U', chr(225).chr(187).chr(167) => 'u',
            chr(225).chr(187).chr(172) => 'U', chr(225).chr(187).chr(173) => 'u',
            chr(225).chr(187).chr(182) => 'Y', chr(225).chr(187).chr(183) => 'y',
            // tilde
            chr(225).chr(186).chr(170) => 'A', chr(225).chr(186).chr(171) => 'a',
            chr(225).chr(186).chr(180) => 'A', chr(225).chr(186).chr(181) => 'a',
            chr(225).chr(186).chr(188) => 'E', chr(225).chr(186).chr(189) => 'e',
            chr(225).chr(187).chr(132) => 'E', chr(225).chr(187).chr(133) => 'e',
            chr(225).chr(187).chr(150) => 'O', chr(225).chr(187).chr(151) => 'o',
            chr(225).chr(187).chr(160) => 'O', chr(225).chr(187).chr(161) => 'o',
            chr(225).chr(187).chr(174) => 'U', chr(225).chr(187).chr(175) => 'u',
            chr(225).chr(187).chr(184) => 'Y', chr(225).chr(187).chr(185) => 'y',
            // acute accent
            chr(225).chr(186).chr(164) => 'A', chr(225).chr(186).chr(165) => 'a',
            chr(225).chr(186).chr(174) => 'A', chr(225).chr(186).chr(175) => 'a',
            chr(225).chr(186).chr(190) => 'E', chr(225).chr(186).chr(191) => 'e',
            chr(225).chr(187).chr(144) => 'O', chr(225).chr(187).chr(145) => 'o',
            chr(225).chr(187).chr(154) => 'O', chr(225).chr(187).chr(155) => 'o',
            chr(225).chr(187).chr(168) => 'U', chr(225).chr(187).chr(169) => 'u',
            // dot below
            chr(225).chr(186).chr(160) => 'A', chr(225).chr(186).chr(161) => 'a',
            chr(225).chr(186).chr(172) => 'A', chr(225).chr(186).chr(173) => 'a',
            chr(225).chr(186).chr(182) => 'A', chr(225).chr(186).chr(183) => 'a',
            chr(225).chr(186).chr(184) => 'E', chr(225).chr(186).chr(185) => 'e',
            chr(225).chr(187).chr(134) => 'E', chr(225).chr(187).chr(135) => 'e',
            chr(225).chr(187).chr(138) => 'I', chr(225).chr(187).chr(139) => 'i',
            chr(225).chr(187).chr(140) => 'O', chr(225).chr(187).chr(141) => 'o',
            chr(225).chr(187).chr(152) => 'O', chr(225).chr(187).chr(153) => 'o',
            chr(225).chr(187).chr(162) => 'O', chr(225).chr(187).chr(163) => 'o',
            chr(225).chr(187).chr(164) => 'U', chr(225).chr(187).chr(165) => 'u',
            chr(225).chr(187).chr(176) => 'U', chr(225).chr(187).chr(177) => 'u',
            chr(225).chr(187).chr(180) => 'Y', chr(225).chr(187).chr(181) => 'y',
            // Vowels with diacritic (Chinese, Hanyu Pinyin)
            chr(201).chr(145) => 'a',
            // macron
            chr(199).chr(149) => 'U', chr(199).chr(150) => 'u',
            // acute accent
            chr(199).chr(151) => 'U', chr(199).chr(152) => 'u',
            // caron
            chr(199).chr(141) => 'A', chr(199).chr(142) => 'a',
            chr(199).chr(143) => 'I', chr(199).chr(144) => 'i',
            chr(199).chr(145) => 'O', chr(199).chr(146) => 'o',
            chr(199).chr(147) => 'U', chr(199).chr(148) => 'u',
            chr(199).chr(153) => 'U', chr(199).chr(154) => 'u',
            // grave accent
            chr(199).chr(155) => 'U', chr(199).chr(156) => 'u',
        );

        $string = strtr($string, $chars);
    } else {
        $chars = array();
        // Assume ISO-8859-1 if not UTF-8
        $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158)
            .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194)
            .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202)
            .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210)
            .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218)
            .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227)
            .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235)
            .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243)
            .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251)
            .chr(252).chr(253).chr(255);

        $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";

        $string = strtr($string, $chars['in'], $chars['out']);
        $double_chars = array();
        $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254));
        $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th');
        $string = str_replace($double_chars['in'], $double_chars['out'], $string);
    }

    return $string;
}

আমার উত্তরটি @ মডেলিক সমাধানের আপডেট, যেহেতু রোমানিয়ান বা সম্ভবত অন্যান্য ভাষার ডায়রিটিক্স রূপান্তরিত হয়নি। আমি সর্বনিম্ন ফাংশন লিখেছি এবং কবজির মতো কাজ করি।

print_r(remove_accents('Iași, Iași County, Romania'));

0
<?php
/* 
 * Thanks:
 *   - The idea of extracting accents equiv chars with the help of the HTMLSpecialChars convertion was taking from ICanBoogie Package of 'Olivier Laviale' {@link http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-accentues.html}
*/
function accentCharsModifier($str){
    if(($length=mb_strlen($str,"UTF-8"))<strlen($str)){
        $i=$count=0;
        while($i<$length){
            if(strlen($c=mb_substr($str,$i,1,"UTF-8"))>1){
                $he=htmlentities($c); 
                if(($nC=preg_replace("#&([A-Za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#", "\\1", $he))!=$he ||
                    ($nC=preg_replace("#&([A-Za-z]{2})(?:lig);#", "\\1", $he))!=$he ||
                    ($nC=preg_replace("#&[^;]+;#", "", $he))!=$he){
                    $str=str_replace($c,$nC,$str,$count);if($nC==""){$length=$length-$count;$i--;}
                }
            }
            $i++;
        }
    }
    return $str;
}
echo accentCharsModifier("&éôpkAÈû");
?>

0

@ মিমৌনি উত্তরের উপর ভিত্তি করে আমি এই ফাংশনটি অ্যাকসেন্টড স্ট্রিংগুলিকে অ-উচ্চারণযুক্ত স্ট্রিংগুলিতে অনুলিপি করতে তৈরি করেছি।

/**
 * @param $str Convert string to lowercase and replace special chars to equivalents ou remove its
 * @return string
 */
function _slugify(string $string): string
{
    $str = $string; // for comparisons
    $str = _toUtf8($str); // Force to work with string in UTF-8
    $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

    if ($str != htmlentities($string, ENT_QUOTES, 'UTF-8')) { // iconv fails
        $str = _toUtf8($string);
        $str = htmlentities($str, ENT_QUOTES, 'UTF-8');
        $str = preg_replace('#&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);#i', '$1', $str);
        // Need to strip non ASCII chars or any other than a-z, A-Z, 0-9...
        $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
        $str = preg_replace(array('#[^0-9a-z]#i', '#[ -]+#'), ' ', $str);
        $str = trim($str, ' -');
    }

    // lowercase
    $string = strtolower($str);

    return $string;
}

স্ট্রিংগুলিকে ইউটিএফ -8 এ রূপান্তর করতে, আমি এখানে মাল্টি বাইট স্ট্রিং এক্সটেনশনটি ব্যবহার করি। নোট করুন যে মিশ্র সামগ্রী সহ আমার সমস্যা এড়াতে আমি টুকরো টুকরো টুকরো করেছি (আমার এ জাতীয় পরিস্থিতি রয়েছে) এবং শব্দকে কথার মাধ্যমে রূপান্তর করি।

/**
 * @param $str string String in any encoding
 * @return string
 */
function _toUtf8(string $str_in): ?string
{
    if (!function_exists('mb_detect_encoding')) {
        throw new \Exception('The Multi Byte String extension is absent!');
    }
    $str_out = [];
    $words = explode(" ", $str_in);
    foreach ($words as $word) {
        $current_encoding = mb_detect_encoding($word, 'UTF-8, ASCII, ISO-8859-1');
        $str_out[] = mb_convert_encoding($word, 'UTF-8', $current_encoding);
    }
    return implode(" ", $str_out);
}

পাদটীকা নোট: উইন্ডোজ কমান্ড লাইনে PHPUnit ইউনিট টেস্টগুলিতে পাস হওয়া একমাত্র সমাধানটি ছিল (স্থানীয় সমস্যাগুলি) @ গাবো সমাধানটি কাজ করা উচিত তবে দুর্ভাগ্যক্রমে আমার জন্য নয়


0

এই এক কি দোষ? ইউটিএফ 8 নিয়ে কাজ করে

function strip_accents($s){
  return str_replace(
    explode(' ', preg_replace('/ +/', ' ', 'č ć ž š đ  Č Ć Ž Š Đ  à á â ã ä ç è é ê ë ì í î ï ñ ò ó ô õ ö ù ú û ü ý ÿ À Á Â Ã Ä Ç È É Ê Ë Ì Í Î Ï Ñ Ò Ó Ô Õ Ö Ù Ú Û Ü Ý')),
    explode(' ', preg_replace('/ +/', ' ', 'c c z s dj C C Z S DJ a a a a a c e e e e i i i i n o o o o o u u u u y y A A A A A C E E E E I I I I N O O O O O U U U U Y')),
    $s);
}

এটি ব্যবহার না করে দ্রুততর হতে পারে preg_replaceতবে গতিটি এখানে আমার লক্ষ্য ছিল না।


0

এই উত্তরটি আমি এখানে নিম্নলিখিত টিপস পেয়েছি, তাই এটি সত্যিই আমার নয়। এটি LATIN1 বা UTF-8 ব্যবহার করে আমার জন্য কাজ করে। আপনি যদি অন্যান্য অক্ষরগুলি ব্যবহার করেন তবে আপনার সম্ভবত এটি mb_detect_encodingফাংশনে যুক্ত করা উচিত । সঠিক পরিবেশ সেট সম্ভবত প্রয়োজন হয়।

function NoAccents($s){
        return iconv(mb_detect_encoding($s,'UTF-8, ASCII, ISO-8859-1'),'ASCII//TRANSLIT//INGORE',$s);
}

জন্য Fóø Bår, আমি আসলে শুধুমাত্র পেয়েছিলাম Fo? Barøঅক্ষরে অনুবাদ করা যায়নি o। আমার পরিবেশটিকে কোনও_না, দা_ডিকে পরিবর্তনের চেষ্টা করেছিল, কিন্তু তাতে কোনও হস্তক্ষেপ হয়নি। setlocale(LC_CTYPE,'da_DK')আমি পেয়েছি ব্যবহার করে Fo? Baar
helviojr

-1

ওয়েবে আমি হোঁচট খেয়েছি এমন একটি কৌশল হ'ল এইচটিএমলেটিটিস ব্যবহার করে এর পরে এনকোডযুক্ত চরিত্রটি কেড়ে নিয়েছিল :

$stripped = preg_replace('`&[^;]+;`','',htmlentities($string));

নিখুঁত নয় তবে এটি কিছু ক্ষেত্রে ভাল কাজ করে।

কিন্তু, আপনি একটি URL টিতে তৈরি, তাই চলেছেন লেখা urlencode এবং তার সহযোগীর urldecode ভাল হতে পারে। অথবা, আপনি যদি কোয়েরি স্ট্রিং তৈরি করে থাকেন তবে এই শেষ ফাংশনটি ব্যবহার করুন: http_build_query


-1

ওয়ার্ডপ্রেসের বাস্তবায়ন ইউটিএফ 8 স্ট্রিংয়ের জন্য অবশ্যই নিরাপদ। ল্যাটিন 1 স্ট্রিংয়ের জন্য, একটি সাধারণ স্ট্রাইট কাজ করে তবে আপনি নিজের স্ক্রিপ্টটি ইউটিএফ -8 নয়, LATIN1 ফর্ম্যাটে সংরক্ষণ করছেন তা নিশ্চিত করুন।


-1
$unwanted_array = array(    '&amp;' => 'and', '&' => 'and', '@' => 'at', '©' => 'c', '®' => 'r', 
'̊'=>'','̧'=>'','̨'=>'','̄'=>'','̱'=>'',
'Á'=>'a','á'=>'a','À'=>'a','à'=>'a','Ă'=>'a','ă'=>'a','ắ'=>'a','Ắ'=>'A','Ằ'=>'A',
'ằ'=>'a','ẵ'=>'a','Ẵ'=>'A','ẳ'=>'a','Ẳ'=>'A','Â'=>'a','â'=>'a','ấ'=>'a','Ấ'=>'A',
'ầ'=>'a','Ầ'=>'a','ẩ'=>'a','Ẩ'=>'A','Ǎ'=>'a','ǎ'=>'a','Å'=>'a','å'=>'a','Ǻ'=>'a',
'ǻ'=>'a','Ä'=>'a','ä'=>'a','ã'=>'a','Ã'=>'A','Ą'=>'a','ą'=>'a','Ā'=>'a','ā'=>'a',
'ả'=>'a','Ả'=>'a','Ạ'=>'A','ạ'=>'a','ặ'=>'a','Ặ'=>'A','ậ'=>'a','Ậ'=>'A','Æ'=>'ae',
'æ'=>'ae','Ǽ'=>'ae','ǽ'=>'ae','ẫ'=>'a','Ẫ'=>'A',
'Ć'=>'c','ć'=>'c','Ĉ'=>'c','ĉ'=>'c','Č'=>'c','č'=>'c','Ċ'=>'c','ċ'=>'c','Ç'=>'c','ç'=>'c',
'Ď'=>'d','ď'=>'d','Ḑ'=>'D','ḑ'=>'d','Đ'=>'d','đ'=>'d','Ḍ'=>'D','ḍ'=>'d','Ḏ'=>'D','ḏ'=>'d','ð'=>'d','Ð'=>'D',
'É'=>'e','é'=>'e','È'=>'e','è'=>'e','Ĕ'=>'e','ĕ'=>'e','ê'=>'e','ế'=>'e','Ế'=>'E','ề'=>'e',
'Ề'=>'E','Ě'=>'e','ě'=>'e','Ë'=>'e','ë'=>'e','Ė'=>'e','ė'=>'e','Ę'=>'e','ę'=>'e','Ē'=>'e',
'ē'=>'e','ệ'=>'e','Ệ'=>'E','Ə'=>'e','ə'=>'e','ẽ'=>'e','Ẽ'=>'E','ễ'=>'e',
'Ễ'=>'E','ể'=>'e','Ể'=>'E','ẻ'=>'e','Ẻ'=>'E','ẹ'=>'e','Ẹ'=>'E',
'ƒ'=>'f',
'Ğ'=>'g','ğ'=>'g','Ĝ'=>'g','ĝ'=>'g','Ǧ'=>'G','ǧ'=>'g','Ġ'=>'g','ġ'=>'g','Ģ'=>'g','ģ'=>'g',
'H̲'=>'H','h̲'=>'h','Ĥ'=>'h','ĥ'=>'h','Ȟ'=>'H','ȟ'=>'h','Ḩ'=>'H','ḩ'=>'h','Ħ'=>'h','ħ'=>'h','Ḥ'=>'H','ḥ'=>'h',
'Ỉ'=>'I','Í'=>'i','í'=>'i','Ì'=>'i','ì'=>'i','Ĭ'=>'i','ĭ'=>'i','Î'=>'i','î'=>'i','Ǐ'=>'i','ǐ'=>'i',
'Ï'=>'i','ï'=>'i','Ḯ'=>'I','ḯ'=>'i','Ĩ'=>'i','ĩ'=>'i','İ'=>'i','Į'=>'i','į'=>'i','Ī'=>'i','ī'=>'i',
'ỉ'=>'I','Ị'=>'I','ị'=>'i','IJ'=>'ij','ij'=>'ij','ı'=>'i',
'Ĵ'=>'j','ĵ'=>'j',
'Ķ'=>'k','ķ'=>'k','Ḵ'=>'K','ḵ'=>'k',
'Ĺ'=>'l','ĺ'=>'l','Ľ'=>'l','ľ'=>'l','Ļ'=>'l','ļ'=>'l','Ł'=>'l','ł'=>'l','Ŀ'=>'l','ŀ'=>'l',
'Ń'=>'n','ń'=>'n','Ň'=>'n','ň'=>'n','Ñ'=>'N','ñ'=>'n','Ņ'=>'n','ņ'=>'n','Ṇ'=>'N','ṇ'=>'n','Ŋ'=>'n','ŋ'=>'n',
'Ó'=>'o','ó'=>'o','Ò'=>'o','ò'=>'o','Ŏ'=>'o','ŏ'=>'o','Ô'=>'o','ô'=>'o','ố'=>'o','Ố'=>'O','ồ'=>'o',
'Ồ'=>'O','ổ'=>'o','Ổ'=>'O','Ǒ'=>'o','ǒ'=>'o','Ö'=>'o','ö'=>'o','Ő'=>'o','ő'=>'o','Õ'=>'o','õ'=>'o',
'Ø'=>'o','ø'=>'o','Ǿ'=>'o','ǿ'=>'o','Ǫ'=>'O','ǫ'=>'o','Ǭ'=>'O','ǭ'=>'o','Ō'=>'o','ō'=>'o','ỏ'=>'o',
'Ỏ'=>'O','Ơ'=>'o','ơ'=>'o','ớ'=>'o','Ớ'=>'O','ờ'=>'o','Ờ'=>'O','ở'=>'o','Ở'=>'O','ợ'=>'o','Ợ'=>'O',
'ọ'=>'o','Ọ'=>'O','ọ'=>'o','Ọ'=>'O','ộ'=>'o','Ộ'=>'O','ỗ'=>'o','Ỗ'=>'O','ỡ'=>'o','Ỡ'=>'O',
'Œ'=>'oe','œ'=>'oe',
'ĸ'=>'k',
'Ŕ'=>'r','ŕ'=>'r','Ř'=>'r','ř'=>'r','ṙ'=>'r','Ŗ'=>'r','ŗ'=>'r','Ṛ'=>'R','ṛ'=>'r','Ṟ'=>'R','ṟ'=>'r',
'S̲'=>'S','s̲'=>'s','Ś'=>'s','ś'=>'s','Ŝ'=>'s','ŝ'=>'s','Š'=>'s','š'=>'s','Ş'=>'s','ş'=>'s',
'Ṣ'=>'S','ṣ'=>'s','Ș'=>'S','ș'=>'s',
'ſ'=>'z','ß'=>'ss','Ť'=>'t','ť'=>'t','Ţ'=>'t','ţ'=>'t','Ṭ'=>'T','ṭ'=>'t','Ț'=>'T',
'ț'=>'t','Ṯ'=>'T','ṯ'=>'t','™'=>'tm','Ŧ'=>'t','ŧ'=>'t',
'Ú'=>'u','ú'=>'u','Ù'=>'u','ù'=>'u','Ŭ'=>'u','ŭ'=>'u','Û'=>'u','û'=>'u','Ǔ'=>'u','ǔ'=>'u','Ů'=>'u','ů'=>'u',
'Ü'=>'u','ü'=>'u','Ǘ'=>'u','ǘ'=>'u','Ǜ'=>'u','ǜ'=>'u','Ǚ'=>'u','ǚ'=>'u','Ǖ'=>'u','ǖ'=>'u','Ű'=>'u','ű'=>'u',
'Ũ'=>'u','ũ'=>'u','Ų'=>'u','ų'=>'u','Ū'=>'u','ū'=>'u','Ư'=>'u','ư'=>'u','ứ'=>'u','Ứ'=>'U','ừ'=>'u','Ừ'=>'U',
'ử'=>'u','Ử'=>'U','ự'=>'u','Ự'=>'U','ụ'=>'u','Ụ'=>'U','ủ'=>'u','Ủ'=>'U','ữ'=>'u','Ữ'=>'U',
'Ŵ'=>'w','ŵ'=>'w',
'Ý'=>'y','ý'=>'y','ỳ'=>'y','Ỳ'=>'Y','Ŷ'=>'y','ŷ'=>'y','ÿ'=>'y','Ÿ'=>'y','ỹ'=>'y','Ỹ'=>'Y','ỷ'=>'y','Ỷ'=>'Y',
'Z̲'=>'Z','z̲'=>'z','Ź'=>'z','ź'=>'z','Ž'=>'z','ž'=>'z','Ż'=>'z','ż'=>'z','Ẕ'=>'Z','ẕ'=>'z',
'þ'=>'p','ʼn'=>'n','А'=>'a','а'=>'a','Б'=>'b','б'=>'b','В'=>'v','в'=>'v','Г'=>'g','г'=>'g','Ґ'=>'g','ґ'=>'g',
'Д'=>'d','д'=>'d','Е'=>'e','е'=>'e','Ё'=>'jo','ё'=>'jo','Є'=>'e','є'=>'e','Ж'=>'zh','ж'=>'zh','З'=>'z','з'=>'z',
'И'=>'i','и'=>'i','І'=>'i','і'=>'i','Ї'=>'i','ї'=>'i','Й'=>'j','й'=>'j','К'=>'k','к'=>'k','Л'=>'l','л'=>'l',
'М'=>'m','м'=>'m','Н'=>'n','н'=>'n','О'=>'o','о'=>'o','П'=>'p','п'=>'p','Р'=>'r','р'=>'r','С'=>'s','с'=>'s',
'Т'=>'t','т'=>'t','У'=>'u','у'=>'u','Ф'=>'f','ф'=>'f','Х'=>'h','х'=>'h','Ц'=>'c','ц'=>'c','Ч'=>'ch','ч'=>'ch',
'Ш'=>'sh','ш'=>'sh','Щ'=>'sch','щ'=>'sch','Ъ'=>'-',
'ъ'=>'-','Ы'=>'y','ы'=>'y','Ь'=>'-','ь'=>'-',
'Э'=>'je','э'=>'je','Ю'=>'ju','ю'=>'ju','Я'=>'ja','я'=>'ja','א'=>'a','ב'=>'b','ג'=>'g','ד'=>'d','ה'=>'h','ו'=>'v',
'ז'=>'z','ח'=>'h','ט'=>'t','י'=>'i','ך'=>'k','כ'=>'k','ל'=>'l','ם'=>'m','מ'=>'m','ן'=>'n','נ'=>'n','ס'=>'s','ע'=>'e',
'ף'=>'p','פ'=>'p','ץ'=>'C','צ'=>'c','ק'=>'q','ר'=>'r','ש'=>'w','ת'=>'t'
);

$accentsRemoved = strtr( $stringToRemoveAccents , $unwanted_array );

এই পুরানো প্রশ্নের অন্য গৃহীত উত্তরের চেয়ে কেন এটি উন্নতি হবে বা এর আরও ভাল সমাধান হবে?
বিসার্স

দিয়েগো ক্যাস্তিলো এটির উত্তর দিয়েছিল: কিউবিক.আর। / থি-পারফেক্ট- পিএপিপি- ক্ল্যান- ইউরেল- জেনারেটর এবং এটি আরও ভাল

এটিই একমাত্র উত্তর যা সমস্ত উচ্চারণ আছে। অন্যান্য উত্তরগুলির বেশিরভাগটিতে
এমনটিও নেই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.