2014-04-08 2 views
-1

다른 튜토리얼에서 사용하고있는 슬러그 기능이 있습니다.PHP로 URL 인코딩 완성을 찾고 있습니다

public function createSlug($slug) { 
     // Remove anything but letters, numbers, spaces, hypens 
     // Remove spaces and duplicate dypens 
     // Trim the left and right, removing any left over hypens 

     $lettersNumbersSpacesHypens = '/[^\-\s\pN\pL]+/u'; 
     $spacesDuplicateHypens = '/[\-\s]+/'; 

     $slug = preg_replace($lettersNumbersSpacesHypens, '', mb_strtolower($slug, 'UTF-8')); 
     $slug = preg_replace($spacesDuplicateHypens, '-', $slug); 
     $slug = trim($slug, '-'); 

     return $slug; 
    } 

훌륭한 작품입니다. 두 가지 질문이 있습니다.

  1. '&'기호를 제거하는 대신 'amp'가 표시됩니다. 그것이 그렇게되어야하는지 확실하지 않습니다.

    예 :

원래 URL

http://www.mywebsite.com?category_id=1&category_name=hot & dogs 

새로운 URL을 사용하여 슬러그 기능

http://www.mywebsite.com?category_id=1&category_name=hot-amp-dogs 

둘째, 나는 원래의 형태로 다시 디코딩 어떻게 내가 에코 할 수 있도록 페이지에 그것을 밖으로? 대시가 제대로 표시되지 않습니다.

+0

간단한 앰퍼샌드 - 예를 들어 링크에서 볼 수 있습니다. 디코딩을위한 – utooall

+0

은 DB에서 두 개의 필드를 사용하여 슬러그와 원본 URL을 처리하므로 db에서 원본을 가져와야합니다. 그래서 디코딩 할 필요가 없습니다. –

+0

나는 이해합니다. 나는 그 일을하는 방법을 찾아야 겠지. 그것을 지적 주셔서 감사합니다. – utooall

답변

0

"htmlspecialchars_decode"를 사용하십시오. 아래 수정 된 기능을 참조하십시오.

function createSlug($slug) { 
// Remove anything but letters, numbers, spaces, hypens 
// Remove spaces and duplicate dypens 
// Trim the left and right, removing any left over hypens 
$slug = htmlspecialchars_decode($slug); 

$lettersNumbersSpacesHypens = '/[^\-\s\pN\pL]+/u'; 
$spacesDuplicateHypens = '/[\-\s]+/'; 

$slug = preg_replace($lettersNumbersSpacesHypens, '', mb_strtolower($slug, 'UTF-8')); 
$slug = preg_replace($spacesDuplicateHypens, '-', $slug); 
$slug = trim($slug, '-'); 

return $slug; 
} 

디코딩하려면 Rakesh Sharma에 동의하십시오. 이것을 사용하여 데이터베이스를 관리하십시오.

+0

아, 예, htmlspecialchars가 트릭을 만들었습니다. 고맙습니다. – utooall