2009-04-12 1 views
3

PHP에서 URL (* .html)의 파일 이름으로 사용할 문자열을 자동으로 변환하는 함수를 준비 중입니다. 아스키는 안전한쪽에 있어야하지만 SEO 필요에 따라 파일 이름을 다른 언어로 허용해야하지만 대시 (-) 및 밑줄 (_) 이외의 구두점을 포함하지 않으려면 chars 같은 * % $ # @는 " '허용되어서는 안된다.구두점을 제외한 UTF 문자와 일치하는 정규식

공백은 대시로 변환해야합니다.

내가 생각 정규식 가장 쉬운 방법이 될 것입니다,하지만 난 그것을 어떻게 처리 할 모르겠어요 사용 UTF8 문자열

내 ASCII 기능

은 다음과 같습니다.

function convertToPath($string) 
{ 
    $string = strtolower(trim($string)); 
    $string = preg_replace('/[^a-z0-9-]/', '-', $string); 
    $string = preg_replace('/-+/', "-", $string); 
    return $string; 
} 

타를 nks,

Roy.

답변

4

나는 SEO가 필요하다면 URL에 ASCII 문자를 사용해야한다고 생각한다.

이론적으로 더 많은 문자가 URL에 허용됩니다. 실제로 대부분의 시스템은 ASCII를 신뢰할 만합니다.

또한 대부분의 자동 구문 해석 - 링크 스크립트는 비 ASCII 문자에 영향을줍니다. 따라서 URL에 비 ASCII 문자가 포함 된 URL을 허용하면 사용자 생성 콘텐츠에 표시되는 링크 변경이 크게 줄어 듭니다. How to handle diacritics (accents) when rewriting ‘pretty URLs’

허용되는 해결책이 : 또한 살펴 수

(당신은 스크립트의 예를 원하는 경우에 유래 스크립트를 살펴보고, 그것은 예를 들어 괄호에 초크) 비 ASCII 문자를 transiterate하기 : '-'

<?php 
    $text = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text); 
?> 

희망이이도에 악센트 같은 것들을 (즉, 일반적으로 비 간격이다) 대체 할

+0

URL에 ASCII 문자가 아닌 문자를 남겨두면 클라이언트 브라우저의 URL 인코딩을 추적해야하므로 문제가 발생합니다 (일치하지 않음). 하지만 iconv-transliteration을 사용하려면 올바른 로케일 (UTF-8 인코딩)을 설정해야합니다. Windows를 사용하면이 –

+0

은 쇼 스토퍼입니다. –

4

UTF-8 모드는의 모든 비 편지를 선택할 수 있습니다를 선택하면 - 사용 (유니 코드 일반 범주에 따라이 PHP 문서 Regular Expression Details를 참조하십시오)를

/\P{L}+/ 

그래서 좋겠 (테스트되지 않은) 다음을 시도해보십시오

function convertToPath($string) 
{ 
    $string = mb_strtolower(trim($string), 'UTF-8'); 
    $string = preg_replace('/\P{L}+/', '-', $string); 
    $string = preg_replace('/-+/', "-", $string); 
    return $string; 
} 

것은 당신이 UTF-8 문자열을 당신과 함께 엉망 멀티 바이트 문자가 겠지만에 strtolower()와 prolems를 얻을 수 있습니다주의하십시오 - 대신 mb_strtolower()를 사용합니다.

+0

하는 데 도움이됩니다. 그래서 'Aït Ben Haddou'는 'Ai-t Ben Haddou'가 될 것입니다. – Jacco