XML အခြေပြုဖိုင်ပုံစံတစ်ခုအနေဖြင့် SVG ဖိုင်များတွင်လမ်းကြောင်းများ, လိုင်းများ, စတုဂံများ, စက်ဝိုင်းများစသည့်ဂရပ်ဖစ်တို့၏ဖော်ပြချက်များပါ 0 င်သည်။
SVG ဖိုင်များသည်များသောအားဖြင့် namespace ကိုအသုံးပြုသည်။ ဆိုလိုသည်မှာဖိုင်ရှိ element များသည်တိကျသောရှေ့ဆက်များရှိရန်လိုအပ်နိုင်သည်ဟုဆိုလိုသည်။ ဥပမာအားဖြင့်, <svg> element သည်များသောအားဖြင့်အောက်ပါ namespace ကြေငြာချက်ရှိသည်။
<img class="max-h-96 w-full" src="data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20...%3D%22%22%3E%0A%3C%2Fsvg%3E">
အကယ်. သင်သည်ထိုကဲ့သို့သောဖိုင်ကိုခွဲခြမ်းစိတ်ဖြာရန် SimplexML_load_string ကို တိုက်ရိုက်အသုံးပြုပါက Simplexml အရာဝတ်ထုများသည်လျှို့ဝှက်ချက်များကိုထည့်သွင်းစဉ်းစားလိမ့်မည်။
<span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$xml</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getName</span></span><span>(); </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း: {http://www.w3.org/2000/svg}svg</span></span><span>
</span></span>
ဤကိစ္စတွင်ကျွန်ုပ်တို့သည်သက်ဆိုင်ရာအကြောင်းအရာကိုရယူရန် Namespace နှင့်အတူ element name ကိုသုံးရမည်။ ဥပမာအားဖြင့်:
<span><span><span class="hljs-variable">$namespaced_svg</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-></span><span><span class="hljs-title function_ invoke__">children</span></span><span>(</span><span><span class="hljs-string">'http://www.w3.org/2000/svg'</span></span><span>);
</span></span>
Element Element အပြင် SVG ဖိုင် ( XLink: href ) တွင်အချို့သောဂုဏ်သတ္တိများသည်လည်းနာမည်များရှိနိုင်သည်။ ထို့ကြောင့်ဤဂုဏ်သတ္တိများကိုရယူသည့်အခါအထူးဂရုပြုရန်လည်းလိုအပ်သည်။
<span><span><span class="hljs-variable">$link</span></span><span> = </span><span><span class="hljs-variable">$element</span></span><span>-></span><span><span class="hljs-title function_ invoke__">attributes</span></span><span>(</span><span><span class="hljs-string">'http://www.w3.org/1999/xlink'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$link</span></span><span>[</span><span><span class="hljs-string">'href'</span></span><span>]; </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း对应的属性值</span></span><span>
</span></span>
SVG တွင်ဂရပ်ဖစ်ဖော်ပြချက်များသာမကစာသား (ဥပမာ - <text> elements များ) ပါ 0 င်သည်။ SVG ကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါ Simplexml သည်စာသား node များကိုပုံမှန်ကြိုးများအဖြစ်အလိုအလျောက်ထုတ်ယူသည်။ သို့သော်အချို့သော SVG Text Texts သည်လိုင်းချိုးဖောက်မှုများ, နေရာများစသည်တို့ကဲ့သို့သောပုံစံချခြင်းဆိုင်ရာပြ issues နာများပါ 0 င်နိုင်သည်။
<text> element ကိုသုံးတဲ့အခါသင်ဟာပုံမှန် XML element ကိုသုံးမယ်ဆိုတဲ့စာသားအကြောင်းအရာတွေကိုထုတ်ယူနိုင်သလား။
<span><span><span class="hljs-variable">$textElement</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-></span><span><span class="hljs-title function_ invoke__">xpath</span></span><span>(</span><span><span class="hljs-string">'//svg:text'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$textElement</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း文本内容</span></span><span>
</span></span>
<text> element ထဲမှာစာသားထဲမှာစာသားထဲမှာစာသားမှာကလေးသူငယ်ဒြပ်စင်မျိုးစုံပါ 0 င်မယ်ဆိုရင် SimplexMl_load_load_comloload_load_string ကိုမပြန်နိုင်တော့ဘူးဆိုတာ သတိပြုသင့်တယ်။
အချို့သော SVG ဖိုင်များတွင် interaction သို့မဟုတ် Animations များကိုသတ်မှတ်ရန်အသုံးပြု လေ့ ရှိသည် ။ Parsing လုပ်သည့်အခါ SimplexMl_load_string သည် ဤ script အစိတ်အပိုင်းများကိုမခွဲပါ။
အကယ်. SVG တွင် JavaScript အစိတ်အပိုင်းများကိုသင်မဖြေရှင်းနိုင်ပါကဤ script အစိတ်အပိုင်းများကိုရိုးရှင်းသောပုံမှန်အသုံးအနှုန်းများသို့မဟုတ် string string များမှတဆင့်ဖျက်ပစ်နိုင်သည်။
<span><span><span class="hljs-variable">$clean_svg</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/<script[^>]*>.*?<\/script>/is'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$clean_svg</span></span><span>);
</span></span>
ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည် scirexml သည် svg ဂရပ်ဖစ်အချက်အလက်များကို script အပိုင်းမှစိတ်အနှောင့်အယှက်ဖြစ်စေသည်။
SVG ဖိုင်များတွင်အထူးအက္ခရာများပါ 0 င ် နိုင်သည် ။ SimplexMl_load_string ကို အသုံးပြုသောအခါ PHP သည်ဤဇာတ်ကောင်များကိုအလိုအလျောက်ဝေဖန်သည်။ သို့သော်အချို့ကိစ္စများတွင်ဤစာလုံးများကိုကိုယ်တိုင်ပြုပြင်ရန်လိုအပ်သည်။
အကယ်. SVG အကြောင်းအရာတွင်မလွတ်မြောက်နိုင်သောအထူးအက္ခရာများပါ 0 င်ပါက၎င်းသည်မလွတ်မြောက်နိုင်သောအထူးအက္ခရာများပါ 0 င်ပါက, SVG ဖိုင်ရှိအထူးအက္ခရာများကိုစနစ်တကျလွတ်မြောက်ရန်သို့မဟုတ် encoded ကြောင်းသေချာအောင်လုပ်ပါ။
<span><span><span class="hljs-variable">$escaped_svg</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$escaped_svg</span></span><span>);
</span></span>
SVG ဖိုင်များသည်အလွန်ကြီးမားနိုင်သည်, အထူးသဖြင့်၎င်းတို့သည်ရှုပ်ထွေးသောဂရပ်ဖစ်သို့မဟုတ်အချက်အလက်အမြောက်အများပါ 0 င်သည့်အခါ။ smartxml_load_string ဖြင့်ကြီးမားသော svg ဖိုင်များကိုတင်သည့်အခါ၎င်းသည်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းသို့မဟုတ်မှတ်ဉာဏ်ပြည့်လျှံမှုပြ issues နာများကိုဖြစ်ပေါ်စေနိုင်သည်။ ဤပြ problem နာအမျိုးအစားကိုကိုင်တွယ်ရန်သို့မဟုတ်မှတ်ဥာဏ်အသုံးပြုမှုကိုပိုမိုကောင်းမွန်စေရန် chunked စာဖတ်ခြင်းသို့မဟုတ်အခြားနည်းလမ်းများကိုအသုံးပြုခြင်းကိုသင်စဉ်းစားနိုင်သည်။
PHP ၏ LibxMl စာကြည့်တိုက်သည် optimization options များကိုထောက်ပံ့ပေးသည်။ LibxMl_use_internal_internal_Eruers နှင့်အခြား parameters တွေကို configure လုပ်ခြင်းဖြင့်ခွဲခြမ်းစိတ်ဖြာစဉ်မလိုအပ်သောအမှားကိုင်တွယ်ပုံနှင့်မှတ်ဉာဏ်အသုံးပြုမှုကိုလျှော့ချနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">libxml_use_internal_errors</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$svg_string</span></span><span>);
</span></span>