2010-08-29 3 views
5

के रूप में काम करता है, मैं रिक्त स्ट्रिंग वाले रिक्त स्ट्रिंग वाले सभी गैर शब्द वर्णों को एक स्ट्रिंग में बदलने की कोशिश कर रहा हूं और एक ही स्थान के रूप में सभी एकाधिक रिक्त स्थान एक साथ रखता हूं।PHP mb_ereg_replace को प्रतिस्थापित नहीं किया गया है, जबकि preg_replace इच्छित

निम्नलिखित कोड यह करता है।

$cleanedString = preg_replace('/[^\w]/', ' ', $name); 
$cleanedString = preg_replace('/\s+/', ' ', $cleanedString); 

लेकिन जब मैं mb_ereg_replace का उपयोग करने की कोशिश कर रहा हूं तो कुछ भी नहीं होता है।

$cleanedString = mb_ereg_replace('/[^\w]/', ' ', $name); 
$cleanedString = mb_ereg_replace('/\s+/', ' ', $cleanedString); 

$ cleanedString उपरोक्त मामले में $ नाम के समान है। मैं क्या गलत कर रहा हूं?

उत्तर

10

mb_ereg_replace विभाजक का उपयोग नहीं करता है। आपको पहले एन्कोडिंग निर्दिष्ट करना पड़ सकता है या नहीं भी।

mb_regex_encoding("UTF-8"); 
//regex could also be \W 
$cleanedString = mb_ereg_replace('[^\w]', ' ', $name); 
$cleanedString = mb_ereg_replace('\s+', ' ', $cleanedString); 
+0

धन्यवाद कि मैंने गलती की थी। यदि मेरा इनपुट यूटीएफ -8 है तो किस विधि का उपयोग करने के लिए कोई सिफारिश है? – Jithin

+0

@ जिथिन यदि यह यूटीएफ -8 है, तो आप 'u' ध्वज के साथ 'preg_replace' का भी उपयोग कर सकते हैं:' preg_replace ('/ \ s +/u', '', $ cleanedString);' – Artefacto

+0

@Artefacto धन्यवाद। क्या आप कृपया मुझे बता सकते हैं कि यह मानना ​​सुरक्षित है कि जब तक यूटीएफ -8 एन्कोडिंग में इनपुट होता है, तो preg_replace अधिकांश भाषाओं के लिए काम करेगा? – Jithin

-3

इनपुट Multi-Byte नहीं है इसलिए mb फ़ंक्शन विफल रहता है।

+0

ठीक समर्थन करते हैं। लेकिन क्या आप कृपया बता सकते हैं कि जब हमें इनपुट यूटीएफ -8 में है तो हमें preg_replace के बजाय mb_ereg_replace का उपयोग करना चाहिए। वर्तमान में मैंने अंग्रेजी टेक्स्ट को $ name के रूप में पास कर दिया। लेकिन अगर कल मैं किसी अन्य भाषा का उपयोग करता हूं तो हिंदी मेरा कोड तोड़ देगा? – Jithin

+0

गलत। मल्टीबाइट एक्सटेंशन एकल बाइट एन्कोडिंग को संभाल सकता है। – Artefacto

+0

@Atetefacto: ठीक है, मेरा बुरा। – shamittomar

-1
function create_slug_html($string, $ext='.html'){  
    $replace = '-';   
    $string=strtolower($string);  
    $string=trim($string); 

    mb_regex_encoding("UTF-8"); 
    //regex could also be \W 
    $string= mb_ereg_replace('[^\w]', ' ', $string); 
    $string= mb_ereg_replace('\s+', ' ', $string); 

    //remove query string  
    if(preg_match("#^http(s)?://[a-z0-9-_.]+\.[a-z]{2,4}#i",$string)){   
     $parsed_url = parse_url($string);   
     $string = $parsed_url['host'].' '.$parsed_url['path'];   
     //if want to add scheme eg. http, https than uncomment next line   
     //$string = $parsed_url['scheme'].' '.$string;  
    }  
    //replace/and . with white space  
    $string = preg_replace("/[\/\.]/", " ", $string); 

    // $string = preg_replace("/[^a-z0-9_\s-]/", "", $string); 

    //remove multiple dashes or whitespaces  
    $string = preg_replace("/[\s-]+/", " ", $string); 

    //convert whitespaces and underscore to $replace  
    $string = preg_replace("/[\s_]/", $replace, $string);  
    //limit the slug size  
    $string = substr($string, 0, 200);  
    //slug is generated  
    return ($ext) ? $string.$ext : $string; 

}

कृपया जाँच यह ठीक है और अंग्रेजी और यूनिकोड

+0

जबकि कोड-केवल उत्तर प्रतिबंधित नहीं हैं, कृपया समझें कि यह एक क्यू एंड ए समुदाय है, बल्कि एक भीड़-सोर्सिंग के बजाए, और, आमतौर पर, यदि ओपी को कोड को उत्तर के रूप में पोस्ट किया गया तो समझ गया, तो वह अपने ही तरीके से इसी तरह के समाधान के साथ आया होगा , और पहले स्थान पर एक प्रश्न पोस्ट नहीं किया होता। इस प्रकार, कृपया * कैसे * और/या * क्यों * यह काम करता है, समझाकर अपने उत्तर और/या कोड को संदर्भ प्रदान करें। – XenoRo

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