2011-01-24 15 views
20

में स्ट्रिंग को कनवर्ट करना मेरे पास विशेष वर्णों के साथ तार हैं जिन्हें मैं कन्वर्ट करना चाहता हूं। आम तौर पर मुझे सभी विशेष पात्र और उनके "वेब सुरक्षित" काउंटर पार्ट्स मैन्युअल रूप से मिलते हैं और उन्हें सरणी में डाल देते हैं। फिर मैं प्रत्येक अक्षर को प्रतिस्थापित करने के लिए preg_replace का उपयोग करता हूं।वेब सुरक्षित यूआरआई

लेकिन मैं मदद नहीं कर सकता लेकिन सोच रहा हूं कि एक आसान समाधान है क्योंकि यह त्रुटि प्रूफ दृष्टिकोण है।

यहाँ मैं क्या चाहते हैं का एक उदाहरण है:

Hans Günther -> hans-gunther 
Jären höst -> jaeren-hoest 
René Ågesen -> rene-aagesen 
+0

इसे [लिप्यंतरण] कहा जाता है (http://en.wikipedia.org/wiki/transliteration)। – Gumbo

उत्तर

54

स्ट्रिंग urlencode (स्ट्रिंग $ str)

http://php.net/manual/en/function.urlencode.php

वास्तव में यहाँ के लिए ऊपर अपना उदाहरण की तरह पाठ परिवर्तित करने के बारे में बहुत पोस्ट है अच्छा यूआरएल-सुरक्षित तार (शायद उपरोक्त फ़ंक्शन की तुलना में आपके लिए बेहतर):

http://cubiq.org/the-perfect-php-clean-url-generator

setlocale(LC_ALL, 'en_US.UTF8'); 
function toAscii($str, $replace=array(), $delimiter='-') { 
if(!empty($replace)) { 
    $str = str_replace((array)$replace, ' ', $str); 
} 

$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
$clean = strtolower(trim($clean, '-')); 
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

return $clean; 
} 

यहाँ यह क्या करता है के उदाहरण हैं:

echo toAscii("Mess'd up --text-- just (to) stress /test/ ?our! `little` \\clean\\ url fun.ction!?-->"); 
returns: messd-up-text-just-to-stress-test-our-little-clean-url-function 

echo toAscii("Perché l'erba è verde?", "'"); // Italian 
returns: perche-l-erba-e-verde 

echo toAscii("Peux-tu m'aider s'il te plaît?", "'"); // French 
returns: peux-tu-m-aider-s-il-te-plait 

echo toAscii("Tänk efter nu – förr'n vi föser dig bort"); // Swedish 
returns: tank-efter-nu-forrn-vi-foser-dig-bort 

echo toAscii("ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ"); 
returns: aaaaaaaeceeeeiiiidnooooouuuuyssaaaaaaaeceeeeiiiidnooooouuuuyy 

echo toAscii("Custom`delimiter*example", array('*', '`')); 
returns: custom-delimiter-example 

echo toAscii("My+Last_Crazy|delimiter/example", '', ' '); 
returns: my last crazy delimiter example 

आप ae करने के लिए एक तरह कुछ परिवर्तित करना चाहते हैं और आदि आप (इस तरह एक स्क्रिप्ट माफ करना, एक के बारे में पता नहीं है का उपयोग कर सकते ऐसा करने का बेहतर तरीका):

setlocale(LC_ALL, 'de_DE'); 
$replace = array(
'illegal' => array('/Ä/', '/Ö/', '/Ü/', '/ä/', '/ö/', '/ü/', '/Â/', '/é/'), 
'legal' => array('Ae', 'Oe', 'Ue', 'ae', 'oe', 'ue', 'Aa', 'e') 
); 
$string = 'ich hätte gerne brötechen Mein Name ist Öles Âlex'; 
echo preg_replace($replace['illegal'], $replace['legal'], $string); 

//Output: "ich haette gerne broetechen Mein Name ist Oeles Aalex" 

आप स्पष्ट रूप से सभी को एक साथ रख सकते हैं इस तरह (केवल यू के आकार परिवर्तित> ue आदि, सिर्फ पहली preg_replace और अधिक जोड़ने):

setlocale(LC_ALL, 'en_US.UTF8'); 
function toAscii($str, $replace=array(), $delimiter='-') { 
    if(!empty($replace)) { 
     $str = str_replace((array)$replace, ' ', $str); 
    } 

$clean = preg_replace(array('/Ä/', '/Ö/', '/Ü/', '/ä/', '/ö/', '/ü/'), array('Ae', 'Oe', 'Ue', 'ae', 'oe', 'ue'), $str); 
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $clean); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

    return $clean; 
} 

$text = "Hätten Sie gerne viele Brötchen? Wenn ja dann einfach *[email protected]#$%^&*()eingeben..."; 
echo toAscii($text); 
//OUTPUT: haetten-sie-gerne-viele-broetchen-wenn-ja-dann-einfach-eingeben 
+1

urlencode अक्षरों को एन्कोड करने का कारण बनता है, और आसानी से नहीं पढ़ता है। यदि आप क्वेरी स्ट्रिंग में पैरामीटर पास कर रहे हैं, तो यह ठीक होगा। हालांकि, अगर आप आसानी से यूआरएल पढ़ने की कोशिश कर रहे हैं तो आपको शायद प्रतिस्थापन समारोह के साथ रहना होगा। –

+0

हाँ ... – o1iver

+0

यह महसूस करने के बाद बस कुछ और जोड़ा गया है यह * * * * * * * का अनुवाद नहीं करता है। – Gumbo

1

ऊपर दिया गया कोड अक्षरों के अक्षरों के लिए काम नहीं करता है।

इस उद्देश्य मैं लहजे के बिना समकक्ष द्वारा इस caracters myselt को बदलने के लिए किया था के लिए:

function replace_accent($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); 
} 
function toURI($str, $replace = array(), $delimiter = '-') 
{ 
    if(!empty($replace)) 
    { 
     $str = str_replace((array) $replace, ' ', $str); 
    } 

    $clean=replace_accent($str); 
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $clean); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

    return $clean; 
} 

यह एक अच्छा काम किया हो।

संबंधित मुद्दे