2010-08-07 3 views
0

문자열의 URL 안전 버전을 만들려고합니다.PHP : 데이터베이스 내용의 인코딩 문제 수정 - 문자의 악센트 제거하기

내 데이터베이스에는 값이 medúlla입니다. 이것을 medulla으로 바꾸고 싶습니다.

이 작업을 수행하는 데는 많은 기능이 있지만 데이터베이스에서 값을 검색하면 medúlla으로 반환됩니다.

나는 시도했다 :

  • 는 UTF_8 인코딩
  • 실행하는 것과 전체 데이터베이스 설정 UTF_8 인코딩
  • 테이블 설정 UTF_8 인코딩
  • 설정 질의하기 전에 데이터베이스에`SET NAMES utf8`을 설정하십시오.

값을 화면에 표시하면 원하는대로 표시되지만 변환 기능에는 ú 문자가 표시되지 않습니다 (단순한 str_replace()도 작동하지 않음).

누구나 시스템에서 이것을 UTF-8로 인식하고 변환을 실행할 수 있도록 할 수있는 방법을 알고 있습니까?

감사합니다, 매트

+1

설명 및 수행 방법에 대한 예는 http://stackoverflow.com/questions/3371697/replacing-accented-characters-php를 참조하십시오. – MvanGeest

답변

1

문자열의 URL 안전 버전을 만들려고합니다.

URL에 ASCII 전용 '굼벵이'를 사용하는 것이 일반적이지만 비 ASCII 문자를 포함한 웹 주소를 가질 수 있습니다. 예 :

http://en.wikipedia.org/wiki/Medúlla 

이것은 유효한 IRI입니다.U RI에 포함를 들어, UTF-8해야하며, % 그것을 -encode : (때로는하지 IE 제외)

http://en.wikipedia.org/wiki/Med%C3%BAlla 

어느 쪽이든, 대부분의 브라우저 주소 표시 줄에 IRI 버전을 표시합니다 . Wikipedia와 같은 사이트에서는이를 사용하여 예쁜 주소를 얻습니다.

변환 기능은 ú 문자

무엇 변환 기능을 표시하지 않는 이유는 무엇입니까? rawurlencode()ú에 대해 %C3%BA을 올바르게 吐 去합니다. 아마도 UTF-8 인코딩을 사용하는 경우 일 것입니다. 이것은 URL의 경로 구성 요소에 텍스트를 포함하는 올바른 방법입니다. (urlencode()도 같은 결과를 얻을 수 있지만 쿼리 구성 요소에 사용되어야한다.)

당신이 htmlentities()을 의미하는 경우 ... 하지 사용이 기능을한다. 모든 비 ASCII 문자를 HTML 문자 참조로 변환하므로 출력이 불필요하게 커져서 전달할 문자열의 인코딩이 무엇인지 알아야합니다. UTF-8 $charset 인수를 지정하지 않으면 ISO-8859-1을 사용하므로 모든 비 ASCII 문자가 엉망이됩니다.

비 ASCII 문자를 변조하는 환경을 특별히 제작하지 않는 한 htmlspecialchars()을 사용하는 것이 더 좋습니다. 이것은 작은 출력을 제공하며 $charset 인수를 포함하는 것을 잊었을 때 변경된 모든 문자가 <&과 같은 문자이기 때문에 중요하지 않습니다 (*).

(실제는 <이 멀티 바이트 시퀀스의 일부일 수 있으므로 이스케이프해서는 안되는 동아시아 멀티 바이트 문자 세트의 경우 중요 할 수 있습니다.하지만 일반적으로 UTF-8처럼 이러한 기존 인코딩을 피하기를 원할 것입니다.)

(단순한 str_replace()도 작동하지 않음). 당신은 PHP 소스 코드에 str_replace(..., 'ú', ...)을 썼다면

, 당신은 그렇지 않으면 일치하지 않습니다, 당신은 당신이 취급 할 것 같은 인코딩으로 소스 코드를 저장하는지 확인해야합니다.

대부분의 Windows 텍스트 편집기는 여전히 UTF-8을 사용하는 대신 로캘별로 특수한 "ANSI"코드 페이지를 저장한다는 것은 불행한 일입니다. 그러나 파일을 UTF-8로 저장하는 것이 가능해야하며 교체가 작동해야합니다. 또는 문제가 발생하지 않도록 '\xc3\xba'을 작성하십시오.

우선 사용 mysql_set_charset()

를 조회하기 전에 데이터베이스에 SET NAMES utf8를 실행합니다.

+0

당신은 ANSI에서 텍스트 편집기를 저장하는 것이 옳았습니다. (더 나은 텍스트 편집기에서 ...) UTF-8로 다시 저장했고 모든 것이 잘 작동했습니다. 고맙습니다! –

1

사용한다 URL 안전 문자열로 UTF-8 문자열 변환하려면 :

$str = iconv('UTF-8', 'ASCII//IGNORE//TRANSLIT', $strt); 

(가) 문자를 직면 할 때 일부 예외를 발생하지 iconv()을 알려줍니다 무시를 TRANSLIT 부분은 UTF-8 문자를 가장 가까운 ASCII 문자 ('u'등의 'ú')로 변환합니다.

다음 단계는 공백을 밑줄로 preg_replace()하고 unsafe within an URL 인 문자를 preg_replace() 또는 urlencode()으로 대체 또는 삭제하는 것입니다.

데이터베이스 항목에 대해서는 UTF-8 내용을 삽입하기 전에이 모든 설정 작업을 수행해야합니다. 문자 세트를 기존 테이블로 변경하는 것은 Windows에서 파일 확장자를 변경하는 것과 다소 비슷합니다. JPEG을 GIF로 변환하지 않습니다. 그러나 데이터베이스가 어떤 charset이 선언되었는지에 상관없이 데이터베이스에 저장된 바이트를 정확하게 반환한다는 점에 대해 걱정하지 마십시오. 반환 된 문자열을 INSERT 및 UTF-8로 처리 할 때 사용한 설정을 유지하십시오.

+0

파일 자체를 적절한 UTF-8 인코딩으로 다시 저장하여 문제를 해결했습니다. 모든 것이 효과적 이었지만 팁을 주셔서 감사합니다. 데이터베이스 인코딩을 변경하면 이미 거기에 영향을 미칠지 확실하지 않았습니다. 명확하게 해 주셔서 감사합니다. –