လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> SVG ဖိုင်များကို SVG ဖိုင်များကို SVIXML_load_string function ကိုအသုံးပြုသည့်အခါမည်သည့်အထူးလုပ်ဆောင်မှုကိုအာရုံစိုက်သင့်သနည်း။

SVG ဖိုင်များကို SVG ဖိုင်များကို SVIXML_load_string function ကိုအသုံးပြုသည့်အခါမည်သည့်အထူးလုပ်ဆောင်မှုကိုအာရုံစိုက်သင့်သနည်း။

M66 2025-06-23

1 ။ SVG ဖိုင်ဖွဲ့စည်းပုံ၏အထူးသဘောသဘာဝ

XML အခြေပြုဖိုင်ပုံစံတစ်ခုအနေဖြင့် SVG ဖိုင်များတွင်လမ်းကြောင်းများ, လိုင်းများ, စတုဂံများ, စက်ဝိုင်းများစသည့်ဂရပ်ဖစ်တို့၏ဖော်ပြချက်များပါ 0 င်သည်။

1.1 namespace ပြ issues နာများ

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>-&gt;</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>-&gt;</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>

1.2 Properties တွင် namespaces ကိုင်တွယ်ခြင်း

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>-&gt;</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>

2 ။ SVG ဖိုင်တွင်စာသားအကြောင်းအရာ

SVG တွင်ဂရပ်ဖစ်ဖော်ပြချက်များသာမကစာသား (ဥပမာ - <text> elements များ) ပါ 0 င်သည်။ SVG ကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါ Simplexml သည်စာသား node များကိုပုံမှန်ကြိုးများအဖြစ်အလိုအလျောက်ထုတ်ယူသည်။ သို့သော်အချို့သော SVG Text Texts သည်လိုင်းချိုးဖောက်မှုများ, နေရာများစသည်တို့ကဲ့သို့သောပုံစံချခြင်းဆိုင်ရာပြ issues နာများပါ 0 င်နိုင်သည်။

2.1 စာသားအကြောင်းအရာများကိုရယူပါ

<text> element ကိုသုံးတဲ့အခါသင်ဟာပုံမှန် XML element ကိုသုံးမယ်ဆိုတဲ့စာသားအကြောင်းအရာတွေကိုထုတ်ယူနိုင်သလား။

 <span><span><span class="hljs-variable">$textElement</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</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 ကိုမပြန်နိုင်တော့ဘူးဆိုတာ သတိပြုသင့်တယ်။


3 ။ SVG ဖြစ်ရပ်များနှင့် scripts များကိုကိုင်တွယ်ပါ

အချို့သော SVG ဖိုင်များတွင် interaction သို့မဟုတ် Animations များကိုသတ်မှတ်ရန်အသုံးပြု လေ့ ရှိသည် ။ Parsing လုပ်သည့်အခါ SimplexMl_load_string သည် ဤ script အစိတ်အပိုင်းများကိုမခွဲပါ။

3.1 JavaScript 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">'/&lt;script[^&gt;]*&gt;.*?&lt;\/script&gt;/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 အပိုင်းမှစိတ်အနှောင့်အယှက်ဖြစ်စေသည်။


4 ။ အထူးအက္ခရာများနှင့်အဖွဲ့အစည်းများ၏အပြောင်းအလဲနဲ့

SVG ဖိုင်များတွင်အထူးအက္ခရာများပါ 0 နိုင်သည် SimplexMl_load_string ကို အသုံးပြုသောအခါ PHP သည်ဤဇာတ်ကောင်များကိုအလိုအလျောက်ဝေဖန်သည်။ သို့သော်အချို့ကိစ္စများတွင်ဤစာလုံးများကိုကိုယ်တိုင်ပြုပြင်ရန်လိုအပ်သည်။

4.1 ဇာတ်ကောင်များလွတ်မြောက်ရန်

အကယ်. 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>

5 ။ svg အတွက်ကြီးမားသောဖိုင်များ၏ parse စွမ်းဆောင်ရည်

SVG ဖိုင်များသည်အလွန်ကြီးမားနိုင်သည်, အထူးသဖြင့်၎င်းတို့သည်ရှုပ်ထွေးသောဂရပ်ဖစ်သို့မဟုတ်အချက်အလက်အမြောက်အများပါ 0 င်သည့်အခါ။ smartxml_load_string ဖြင့်ကြီးမားသော svg ဖိုင်များကိုတင်သည့်အခါ၎င်းသည်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းသို့မဟုတ်မှတ်ဉာဏ်ပြည့်လျှံမှုပြ issues နာများကိုဖြစ်ပေါ်စေနိုင်သည်။ ဤပြ problem နာအမျိုးအစားကိုကိုင်တွယ်ရန်သို့မဟုတ်မှတ်ဥာဏ်အသုံးပြုမှုကိုပိုမိုကောင်းမွန်စေရန် chunked စာဖတ်ခြင်းသို့မဟုတ်အခြားနည်းလမ်းများကိုအသုံးပြုခြင်းကိုသင်စဉ်းစားနိုင်သည်။

5.1 LibxMl စာကြည့်တိုက်ကို အသုံးပြု. စွမ်းဆောင်ရည်ကိုအကောင်းဆုံးလုပ်ပါ

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>