2013-12-19 3 views
0

XML 파일에서 제품을 검색하는 검색 기능을 만들었습니다.검색 함수 xml xpath에 아포스트로피가 포함 된 변수

문제는 "아포스트로피가 포함 된 XML 콘텐츠가 있습니다."입니다. 키워드 accu로 검색 할 때 어포 스트로피 때문에 결과가 표시되지 않습니다.

내가 내 결과를 수집하는 데 사용하는 XPath는 다음과 같습니다

$ 제품 = $ XML-> XPath는 ("// 제품을 [. (포함, \"$ 키워드 \ ")를]");

$ 키워드는 매번 달라지며, 검색 할 위치에 따라 다릅니다.

내 XML은 다음과 같습니다

<products> 
     <hoofdgroep>Gereedschappen</hoofdgroep> 
     <subgroep>Accugereedschap</subgroep> 
     <artikelgroep>Accu's voor accugereedschap</artikelgroep> 
     <artikelnummer>224975</artikelnummer> 
     <artikelnaam>accu bosch 9.6V 2.0ah</artikelnaam> 
     <merk>Bosch</merk> 
     <eenheid>st</eenheid> 
</products> 

도와주세요!

+0

여기에 어떤 프로그래밍 언어/라이브러리를 사용하십니까? 이 문제를 해결하는 가장 좋은 방법은 XPath 변수가 포함 된 고정 된 XPath 식을 사용하고 라이브러리가 제공하는 메커니즘을 사용하여 해당 변수의 값을 제공하는 것입니다. 알 수없는 문자열을 연결하는 것만으로도 SQL 주입 공격과 동일한 XPath를 초대 할 수 있습니다. –

+0

웹샵을위한 PHP 검색 스크립트입니다. 고객은 XML 라이브러리에 저장된 제품을 검색해야합니다. – DlennartD

답변

0

표현이 완전히 좋습니다. 예를 들어 accu\'s과 같이 검색어를 보내기 전에 일부 이스케이프 문자 나 다른 문자를 추가하거나 검색 키워드 또는 문서에서 다른 문자를 사용하지 않아야합니다. 따옴표, 악센트 및 아포스트로피가 서로 섞여있는 경우가 많습니다.

주사 공격을 방지하기 위해 이중 백 슬래시를 인용하는 것을 잊지 마십시오! 그런데 XPath는 문자열에 대해 작은 따옴표와 큰 따옴표를 모두 허용하므로 이스케이프 된 큰 따옴표 대신 작은 따옴표를 사용할 수도 있습니다.

+0

흠, 나는 그걸로 일하지 못해서 다른 해결책을 찾았습니다. 키워드에서 's'을 (를) 삭제하십시오. 이제 문제없이 제품을 찾을 수 있습니다. $ keyword = str_replace ("s", "", $ keyword); 글쎄, 키워드에 대/소문자가 혼합 된 경우 (예 : AcCu) 대소 문자를 구분하는 것으로 보이므로 결과가 없습니다. – DlennartD

+0

'translate '를 사용하면 XPath 내에서 대문자로 변환 할 수 있습니다 1.0 (그러나 그것을 사용하여 유니 코드 지원을 제공하기는 어렵습니다). 이 문제에 대해 많은 의문점이 있습니다. PHP는 또한 더 적절할 수도있는 PHP 함수를 등록하고 사용할 수 있습니다. 나는 거기에 적절한 질문이 있다고 생각합니다. 그렇지 않으면 당신은 새로운 질문을 할 것입니다. –