2012-11-08 7 views
2

이 일일 데이터 피드로 작업하고 있습니다. 놀랍게도 MySQL이 설치된 직후에는 필드가 보이지 않았습니다. (누가 피드를 제공하는지에 대해서는 아무런 통제력이 없습니다.)PHP에서는 인쇄 문자를 제외한 모든 것을 제거합니까?

그래서 저는 mysqldump를 수행하고 우편 번호를 발견했으며이 레코드의 도시에는 인쇄되지 않는 문자가 포함되어 있습니다. 'vi'에 다음과 같이 표시했습니다. < 200e>

저는 PHP로 작업 중이며이 데이터를 구문 분석하여 MySQL 데이터베이스에 저장합니다. 나는 이것에 트림 기능을 사용했지만, 그것을 제거하지는 않습니다. 문제는 MySQL 데이터베이스의 zipcode에 대한 쿼리를 수행 할 때 인쇄되지 않는 문자로 레코드를 찾지 못한다는 것입니다.

나는 이것을 MySQL 데이터베이스에 넣기 전에 정리하고 싶습니다.

PHP로 무엇을 할 수 있습니까? 처음에는 정규 표현식이 a-z, A-Z 및 0-9 만 허용한다고 생각했지만 주소는 좋지 않습니다. 주소는 마침표, 쉼표, 하이픈 및 내가 지금 생각하지 않은 다른 것들을 사용합니다.

가장 좋은 방법은 무엇입니까? 인쇄 문자가 아닌 다른 문자를 정의하는 것이 무엇인지를 정확히 알지 못합니다. 이 작업을 수행하는 trim과 같은 또 다른 PHP 함수가 있습니까? 아니면 정규 표현식? 그렇다면 예제를 원합니다. 감사!

나는 PHP 함수를 사용으로보고 있고,이 PHP.NET에 게시 보았다 :

<?php 
$a = "\tcafé\n"; 
//This will remove the tab and the line break 
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW); 
//This will remove the é. 
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
?> 

이 FILTER_FLAG_STRIP_HIGH 참으로 < 200E을 제거 않습니다 사용> 내가 'VI'에서 볼 언급하는 동안, 나는 ' 안드레와 같은 이름으로 편지의 악센트를 벗을 것이라고 우려했다.

어쩌면 정규 표현식이 해결책입니까? 영어로 일을하고 유니 코드 문자를 지원 할 필요가없는 경우

+0

내게 온 첫 번째 아이디어는 정규 표현식입니다. 어쩌면 $ str = preg_replace ('/ [^ a-z0-9 \. \, \ - \ s]/i', '', $ str); 다른 좋은 문자를 정규 표현식에 넣습니다. – user4035

+0

게시 해 주셔서 감사합니다.어떻게 이것을 통해 편지에 악센트를 포함시킬 수 있습니까? (위의 편집 참조). – Edward

+1

독일어와 프랑스어로 정규식과 특수 문자로 답을 추가했습니다. – user4035

답변

1

에서 모든 인쇄되지 않는 문자를 빼내야 :

<?php 
$string = "\tabcde éç ÉäÄéöÖüÜß.,!-\n"; 
$string = preg_replace('/[^a-z0-9\!\.\, \-éâëïüÿçêîôûéäöüß]/iu', '', $string); 
print "[$string]"; 

그것은 준을 :

[abcde éç ÉäÄéöÖüÜß.,!-] 

모든 특수 문자를 추가하면 정규식에 필요합니다.

+0

이것은 내 예제를 완벽하게 처리하고 악센트 부호가있는 문자를 보존했습니다. 감사! – Edward

+0

중국어를 지원해야하는 경우 ??? 그냥 나 자신을 쏜다 고? – user3338098

0

후 바로 [\x20-\x7E]

을 허용 ... 그리고 다른 모든 제거 :

$s = preg_replace('/[^\x20-\x7E]+/', '', $s); 
+0

입니다. 지금 농담하는 거지? – arkascha

4

당신은 PHP 필터를 사용할 수 있습니다 http://www.php.net/manual/en/function.filter-var.php

FILTER_SANITIZE_STRING 필터 또는 필요한 것을 모두 사용하는 것이 좋습니다.

+0

게시 주셔서 감사합니다. 위의 편집에서 강조 표시된 문자에 관한 의견을 참조하십시오. – Edward

2

나는 당신이 대체이 작은 정규식을 사용할 수 있다고 생각 :

preg_replace('/[^[:print:]]+/', '', $your_value); 

그것은 기본적으로 나는이 시도 $ your_value

관련 문제