स्वच्छ यूआरएल - ऑटो पथ उर्फ ​​- कैसे यूआरएल से उच्चारण (É Ó Í - Ñ) को हटाने के लिए?


19

मैं Drupal 7.9 और pathauto 7.x-1.0-rc2 का उपयोग कर रहा हूं

मैं एक्सेंट को रास्तों से हटाना चाहता हूं और उन्हें सामान्य अक्षरों से बदलना चाहता हूं

Á=A
É=E
Ó=O
Í=I
Ñ=N

आदि।

मैं पथ बनाने के लिए एक वर्गीकरण क्षेत्र प्रकार और नोड शीर्षक का उपयोग कर रहा हूं:

[node:field_provincia]/[node:title]

उदाहरण के लिए ávila / mérida

क्या पटाथो में कुछ प्रकार के हुक हैं जो मैं इस फ़ंक्शन को लागू करने के लिए उपयोग कर सकता हूं?

function removeAccents($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);
}

पाथेटो की कतार में प्रासंगिक मुद्दा ।
एडम बालसम 19

जवाबों:


18

क्या आपने लिप्यंतरण मॉड्यूल देखा है ? परियोजना सारांश में कहा गया है कि इसका उपयोग URL के लिए लिप्यंतरण का उपयोग करने के लिए pathauto 2.x के साथ किया जा सकता है।


यह वही है जो मैं उपयोग करता हूं और यह खूबसूरती से काम करता है। मेरे पास अभी भी एक और मुद्दा "œšœž¥ µÀÁ ÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßÃáàáâãäååççééëîïðíéñòóôõöøûúùüÿýÿ" है जबकि ड्रुपल के मेल फ़ंक्शन का उपयोग अच्छी तरह से किया गया है और लिप्यंतरण ने उन लोगों को भी साफ़ कर दिया है।
सिट्रिकगुए

2
लेकिन समस्या यह है कि यह URL में सभी भाषा चार्ट को अंग्रेजी में बदल देता है जो अजीब लगते हैं। उदाहरण के लिए हिब्रू में רדימה דל מוינות בעולש बन जाता है / rshymh-shl-mdynvt-bvlm। ओपी पूछ रहा है कि केवल उच्चारण किए गए चार्ट को कैसे हटाया जाए।
आगा

@AgA आप मॉड्यूल के साथ आने वाली फाइलों को हैक करके (या ओवरराइडिंग कर सकते हैं, यह ठीक है कि अगर मुझे सही तरीके से याद हो तो यह OOP है)।
कैपी एथेरियल

14

इसे निष्पादित करने का सबसे सरल तरीका लिप्यंतरण मॉड्यूल है।

" क्या पटाथो में कुछ प्रकार के हुक हैं जो मैं इस फ़ंक्शन को लागू करने के लिए उपयोग कर सकता हूं " का जवाब देने के लिए , आप हुक_पैथुटो_लियास_ल्टर () का उपयोग कर सकते हैं :

function YOURMODULE_pathauto_alias_alter(&$alias, &$context){
  $alias = removeAccents($alias);
}

function removeAccents($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);
}

बस अपनी विशिष्ट भाषा की जरूरतों के अनुकूल ... आपको कई प्रकार के लहजे सूचीबद्ध करने की कोशिश करने वाले कई कार्य मिलेंगे, एक स्ट्रिंग से डायक्टिक्स हटाएं देखें , लेकिन मुझे डर है कि कोई भी सार्वभौमिक नहीं है।removeAccents()

Php iconv फ़ंक्शन का उपयोग करते हुए, अनुवाद करने के लिए एक सुरुचिपूर्ण तरीका भी है , जो कि अधिकांश डायक्ट्रीक्स को हटा देता है। यदि आपको आउटपुट में प्रश्न-चिह्न मिल रहे हैं, तो पहले सेटेलोकेल के लिए सुविधाजनक हो सकता है। प्रसंग में :

function YOURMODULE_pathauto_alias_alter(&$alias, &$context){
  setlocale(LC_CTYPE, 'es_ES');//Spanish Spain i.e
  $alias = iconv('UTF-8', 'ASCII//TRANSLIT', $alias);
}

संपादित करें: कुछ टिप्पणियों को पढ़ने के बाद, मैंने इसे जोड़ना उपयोगी पाया:


धन्यवाद .. क्या वे दुनिया में एकमात्र उच्चारण वर्ण हैं? क्या आपके पास iconv यूज़ केस के कार्य उदाहरण हैं?
एगा

Pathauto सेटिंग्स में मैंने Â, Ã, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, I've, Â I've , ô, ó, यू, यू, यू, Ü, Y, Þ, ß, A, A, A, A, A, A, æ, सी, ई, ई, ई, ई, मैं, मैं, मैं, मैं ,,, ñ, ñ, ó, ô, ñ, ö, ø, ø, ú, ñ, ü, ý, ñ, know, लेकिन पता नहीं क्यों यह काम नहीं कर रहा है।
आगा


@AgA मैंने आपकी टिप्पणियों को प्रतिबिंबित करने के लिए उत्तर संपादित किया। पाठ को साफ करने के लिए उच्चारण को निर्दिष्ट करने के लिए पथौतो सेटिंग्स सही जगह नहीं है, क्योंकि अकेला पाठ क्षेत्र 'स्ट्रिंग्स टू रिमूव' है। यदि मॉड्यूल लिप्यंतरण आपकी आवश्यकताओं के अनुरूप नहीं है, तो आप बेहतर हुक_पाथुटो_लियास_ल्टर () की कोशिश करेंगे। स्वच्छ url एक विस्तृत विषय है यदि आप सभी वर्णमालाओं, हिंदी, ग्रीक, सिरिलिक, हिब्रू पर विचार करते हैं ...
कोजो

मैं हमेशा ट्रांसलिटरेशन मॉड्यूल का उपयोग करता हूं, एक आकर्षण की तरह काम करता है
कैलोरी

4

यहाँ से कोजो के सुझाव और स्रोत के अनुसार: /programming/3371697/replacing-accented-characters-php - मैं इस कोड का उपयोग कर रहा हूँ जो ठीक काम कर रहा है:

function mymodule_pathauto_alias_alter(&$alias, &$context) {        
    removeAccents($alias);        
}

function removeAccents(&$str) {
    $unwanted_array = array('Š' => 'S', 'š' => 's', 'Ž' => 'Z', 'ž' => 'z', 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'E',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U',
        'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c',
        'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o',
        'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b', 'ÿ' => 'y',
        'G' => 'G', 'I' => 'I', 'S' => 'S', 'g' => 'g', 'i' => 'i', 's' => 's', 'ü' => 'u',
        'a' => 'a', 'A' => 'A', '?' => 's', '?' => 'S', '?' => 't', '?' => 'T'
    );
    $str = strtr($str, $unwanted_array);

}

मैंने पोस्ट टिप्पणियों में भी तुर्की और रोमानियाई वर्ण जोड़े हैं।

मैं मुख्य रूप से कोजो द्वारा सुझाए गए आइकनव का उपयोग नहीं करना चाहता हूं, क्योंकि लोकेल को सेट करने की आवश्यकता होगी और लोकेल स्ट्रिंग को जोड़ने के लिए बोझ जोड़ा जाएगा।


0

URL से एक्सेंट वर्ण हटाने के लिए आप pathauto_cleanstring () का उपयोग कर सकते हैं।

function MYMODULE_pathauto_alias_alter(&$alias, &$context) {
  if (isset($context['data']['node'])) {
    // Include the pathauto module.
    module_load_include('module', 'pathauto');
    // Clean up a string segment to be used in an URL alias.
    $alias = pathauto_cleanstring(preg_replace('/\s+/', '', $alias));
  }
}

मैंने आपके मॉड्यूल की कोशिश की लेकिन इसका काम नहीं हुआ
यूरी

@ यूरी आपने ट्रांसलिटरेशन मॉड्यूल स्थापित किया है?
आर्यश्री प्रितिकरकृष्ण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.