2010-02-10 7 views
10
http://domain.name/1-As Low As 10% Downpayment, Free Golf Membership!!! 

ऊपर यूआरएल 400 bad request रिपोर्ट करेंगे,PHP में यूआरएल संगत मोड में शीर्षक को कन्वर्ट करने का सबसे अच्छा तरीका?

कैसे उपयोगकर्ता के अनुकूल अच्छा अनुरोध करने के लिए इस तरह के शीर्षक कन्वर्ट करने के लिए?

उत्तर

8

इस्तेमाल कर सकते हैं पहले उत्तर यहाँ URL Friendly Username in PHP? देखें:

function Slug($string) 
{ 
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-')); 
} 

$user = 'Alix Axel'; 
echo Slug($user); // alix-axel 

$user = 'Álix Ãxel'; 
echo Slug($user); // alix-axel 

$user = 'Álix----_Ãxel!?!?'; 
echo Slug($user); // alix-axel 
+0

की सूची यह CJK पात्रों के लिए काम नहीं करता है आसान बनाने के लिए। – user198729

+1

@ user198729: क्या आप इनपुट/अपेक्षित आउटपुट का उदाहरण दे सकते हैं? –

20

आप एक "स्लग" के बजाय का उपयोग कर सकते के लिए php एन्कोडिंग है कि: यह लिंक देखें। URL के रूप में verbatim शीर्षक का उपयोग करने के बजाय, आप strtolower() और हाइफ़न वाले सभी गैर-अल्फान्यूमेरिक वर्णों को प्रतिस्थापित करें, फिर डुप्लिकेट हाइफ़न हटा दें। यदि आप अतिरिक्त क्रेडिट की तरह महसूस करते हैं, तो आप stopwords भी निकाल सकते हैं।

तो "1-कम से कम 10% डाउनपेमेंट, मुफ्त गोल्फ सदस्यता !!!" हो जाता है:

as-low-as-10-downpayment-free-gold-membership

कुछ इस तरह:

function sluggify($url) 
{ 
    # Prep string with some basic normalization 
    $url = strtolower($url); 
    $url = strip_tags($url); 
    $url = stripslashes($url); 
    $url = html_entity_decode($url); 

    # Remove quotes (can't, etc.) 
    $url = str_replace('\'', '', $url); 

    # Replace non-alpha numeric with hyphens 
    $match = '/[^a-z0-9]+/'; 
    $replace = '-'; 
    $url = preg_replace($match, $replace, $url); 

    $url = trim($url, '-'); 

    return $url; 
} 

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

0

मैं सिर्फ एक उपयोगी स्लग समारोह के साथ एक सार बनाएँ:

https://gist.github.com/ninjagab/11244087

आप इसे उपयोग कर सकते हैं अनुकूल यूआरएल खोज इंजिन ऑप्टिमाइज़र से शीर्षक कन्वर्ट करने के लिए।

<?php 
class SanitizeUrl { 

    public static function slug($string, $space="-") { 
     $string = utf8_encode($string); 
     if (function_exists('iconv')) { 
      $string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); 
     } 

     $string = preg_replace("/[^a-zA-Z0-9 \-]/", "", $string); 
     $string = trim(preg_replace("/\\s+/", " ", $string)); 
     $string = strtolower($string); 
     $string = str_replace(" ", $space, $string); 

     return $string; 
    } 
} 

$title = 'Thi is a test string with some "strange" chars ò à ù...'; 
echo SanitizeUrl::slug($title); 
//this will output: 
//thi-is-a-test-string-with-some-strange-chars-o-a-u 
+0

इस तरह, आपके स्ट्रिंग में एकाधिक रिक्त स्थान होने पर आपके पास एकाधिक "-" होंगे। – Guillaume

-1

सिर्फ पूर्ण चर $change_to और $to_change

<?php 

// Just full the array list to make replacement complete 
// In this space will change to _, à to just a 



$to_change = [ 
    ' ', 'à', 'à', 'â','é', 'è', 'ê', 'ç', 'ù', 'ô', 'ö' // and so on 
]; 

$change_to = [ 
    '_', 'a', 'a', 'a', 'e', 'e', 'e','c', 'u', 'o', 'o' // and so on 
]; 

$texts = 'This is my slug in êlàb élaboré par'; 

$page_id = str_replace($to_change, $change_to, $texts); 
संबंधित मुद्दे