2012-02-03 2 views
3

내 웹 사이트에 일부 사용자 입력이 허용됩니다. 나중에 XML로 읽습니다. 매번이 이상한 작은 따옴표 나 큰 따옴표를이 같이 얻습니다. ”’. 이것들은 XML을 깨뜨린 소스에서 직접 복사됩니다. 내 XML에서 이러한 유형의 문자를 쉽게 수정할 수 있는지 궁금합니다. htmlentities는 그들을 만지는 것처럼 보이지 않았다.XML의 비표준 따옴표가

이 문자는 어디서 오는가? 나는 의도하지 않게 그들을 어떻게 타이핑하는지에 대해서 확신 할 수 없다.

편집 - 나는이 따옴표 속성에서 사용하지 않는 명확하게 잊었지만 다음과 같은 방법으로 :

<SomeTag>User’s Input</SomeTag> 
+0

당신은 단순한 문자열이 대체 사용할 수 있을까? – annonymously

+0

이러한 것들이 어떻게 XML을 "붕괴"합니까? 어떻게 출력하고 있니? 문제가있는 경우 비 ASCII 문자가있을 수 있습니다. – deceze

+0

글쎄, 기본적으로 그것은 아이폰과 안드로이드에 대한 구문 분석에 실패했습니다. 나는 그것을 깨뜨릴 수있는 인물이 더 있을까 봐 걱정하고 있습니다. 그렇지 않으면 간단한 교체로 충분합니다. – mouser58907

답변

2

외국 문자를 허용하거나 금지하지 마십시오. 그게 당신의 사용자를 위해 성가신 일입니다! 이는 인코딩 문제 일뿐입니다. 난 당신이 XML을 읽을 사용중인 파서 모르겠지만, 합리적으로 정교한 있다면, 당신은 당신의 XML 파일의 맨 위에 다음 인코딩 프라그를 포함하여 문제를 해결할 수 있습니다 :

<?xml version="1.0" encoding="UTF-8"?> 

이 할 수있다 파서의 API에서 UTF-8 옵션이 될 수도 있습니다.

편집 : 난 그냥 브라우저에서 직접 XML을 읽고 읽어 보시기 바랍니다. 대부분의 브라우저는 인코딩 플러그를 듣습니다!

편집 2 : 명백히 UTF-8에서는 이러한 인용 부호가 적합하지 않으므로 위의 내용을 무시하십시오. 대신, 비슷한 문제가 논의되고있는 here을 찾고있을 것입니다. 입력 문자열이 UTF-8 인코딩 된 경우

+1

편집기가 encoding = "UTF-8"을 Encoding = "UTF-8"로 변경 한 경우 –

+0

UTF-8에서는 완벽하게 합법적입니다. 그렇지 않은 경우에는 사용할 수 없습니다. 속성 값 구분을 위해'''또는'''이 필수적으로 사용되는 것일 수도 있습니다 - 원래의 질문은이 점에서 명확하지 않습니다 - 그렇지 않으면 여러분이 정확하다고 여기는 것입니다. –

+0

그들은 유효한 문자입니다. 그러나 UTF-8은 XML 속성 값을 감싸는 데 유효한 문자가 아니기 때문에 요소 나 속성의 내용의 일부로 나타날 수 있지만 속성의 값을 구분하는 데 사용할 수는 없습니다. –

1

멀리 마이크로 소프트 오피스 애플리케이션에서 그대로. Word, Excel 등은 작은 따옴표와 큰 따옴표로 된 쌍을 비표준 "스마트 따옴표"로 바꾸는 불쾌한 습관을 가지고 있습니다.

이 인용 부호

는 정말 아닌 표준 공식 라틴 1 문자 세트로 그것을하지 않았다. 모든 MS Office 앱은 표준 인용 문자를 이러한 가증 한 단어로 "유용하게"바꿉니다.

그냥 "실행 취소 smatquotes"에 대한 구글이나 다음 제거하는 힌트 팁 및 정규 표현식에 대한 "다시 둥근 따옴표로 변환".

+0

이것이 어디에서 발생 했습니까? Milosz가 언급했듯이 사용자의 입력을 수정하는 것을 싫어하지만 대체 할 수있는 옵션이 많지 않습니다. – mouser58907

+0

표준과 다른 점은 무엇입니까? 확실히 그들은 다른 상황에서 따옴표처럼 보이지 않을 PUA였습니다. –

+2

그건 정말 대답이 아니죠? 이 똑똑한 따옴표는 유니 코드 (U + 201D 및 U + 2019)의 일부이며 그렇지 않으면이 페이지에도 표시 할 수 없습니다. 그리고 일반적인 유니 코드 문자처럼 XML 문서에 잘 삽입 될 수 있습니다. 예를 들어, 여러 가지 이유로 스마트 쿼트를 일반적인 따옴표로 대체하려는 경우가 많으므로 "MicroSoft Office를 피하는"기술적 이유가 없습니다. – deceze

1

, 어쩌면 당신은 예를 들어를 htmlentities()로 그를 지정해야합니다 나를 위해

$html = htmlentities('”’', ENT_COMPAT, "utf-8"); 
echo $html; 

을 제공합니다

&rdquo;&rsquo; 

반면,
$html = htmlentities('”’'); 
echo $html; 

혼란 스러움 :

입력 문자열이 UTF-8이 아닌 경우 0, 당신은 그에 따라()를 htmlentities의 인코딩 인수를 조정해야 할 것입니다.

2

이러한 따옴표는 텍스트 내용에 사용되는, 또는 속성을 구분하기 위해? 속성 분리 문자의 경우 XML에 타자기 인용 부호 (단일 또는 이중)가 필요합니다. 마이크로 소프트와 다른 워드 프로세싱 응용 프로그램은 종종 똑똑하고 타자기 따옴표를 타이포그래피 따옴표로 대체하려고합니다. 이는 "어디서 오는가?"라는 질문에 대한 답입니다.

제거해야 할 경우 텍스트 편집기를 사용하여 전체를 바꾸면 간단한 작업을 수행 할 수 있습니다.

하지만 문제가 발생한 이유를 먼저 해결할 수도 있습니다. 아마도 데이터 흐름이 비 ASCII 문자를 처리하지 못하는 경우가 있습니다.이 경우 실제로 수정해야 할 더 깊은 문제입니다 (일반적으로 원하지 않는 코드 변환이 선상의 어딘가에 있다는 의미입니다).

0

사용

$s = 'User’s Input'; 
    $descriptfix = preg_replace('/[“”]/','\"',$s); 
    $descriptfix = preg_replace('/[‘’]/','\'',$descriptfix); 
echo "<SomeTag>htmlentities($s)</SomeTag>";