PHP 板


LINE

看板 PHP  RSS
我在官網沒看到,但是我測試時有遇到這種狀況 參考字串如 $var1='{'json':'xxxxx',{xx..x.x... etc (長度超過 10000) }}'; $var2=1211; $var3=0; 上面是連在一起的,是從檔案撈出來的東西 我的目標是把他parse成 $var_arr['var1']='{}'; $var_arr['var2']=1211; $var_arr['var3']=0; 這樣的格式 code 如下 do { $var = strpos($str,"$",$var); if($var) { $equal = strpos($str,"=",$var); if($equal) { /* 有等號 */ $end = strpos($str,";",$equal); $new_var_key = substr($str,$var+1,$equal-$var-1); $new_var_val = substr($str,$equal+1,$end-$equal-1); $new_var[$new_var_key]=trim($new_var_val,"'"); $var = $end; } else { break; } } else { break; } } while($var); 但是字串長度很長的那個的結果是錯誤的 後面兩個的結果是正確的 因此是不是 substr 有長度的限制? 還是我的程式有寫錯呢? -- [There's no undo in your life]                          ●~   ●~ ●~   ●~ ●~   ●~ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.30.6 ※ 編輯: kerash 來自: 114.34.30.6 (09/10 17:00)
1F:→ chaoms:var1內容就含";"符號..就會出現你的錯誤.. 09/10 17:54
2F:→ kerash:如果有錯的話後面兩個應該不會正確,但是後面是正確的,只 09/10 17:56
3F:→ kerash:有被取回來的長度錯誤,所以我才想是不是length有限制 09/10 17:57
目前是先改用把遠端抓回來的資料寫成檔案再重新 include 但是這樣後續會變成要寫一堆檔案,因此想找出原因 ※ 編輯: kerash 來自: 114.34.30.6 (09/10 17:58)
4F:→ chaoms:考慮一下改用eval或serialize/json_encode等方式處理那資料 09/10 17:57
我的第一筆檔案就是 json_encode 過的 這份檔案算是紀錄檔,但為了方便該主機使用,所以寫成 PHP 格式 <?php $var1='{}'; $var2=xxx; var3=0; ?> 沒辦法直接把這份檔案另存成 json , 因為會牽涉到其他約七個站台 目前要做的是一個管理機制所以才從遠端撈回資料 ※ 編輯: kerash 來自: 114.34.30.6 (09/10 18:00)
5F:→ chaoms:第一個回覆..你必須親自測試一下..有定見會讓你看不到真像. 09/10 18:13
6F:→ chaoms:第二個回覆沒有限制編幾次幾維陣列.. 09/10 18:16
7F:→ chaoms:重點是不用在寫parser... 09/10 18:16
8F:→ kerash:能詳述嗎? 我只能確認沒有那些會失敗的符號,只是不確定切 09/10 20:46
9F:→ kerash:的長度為何。過程中確實是只切應有的次數(我有把位置echo) 09/10 20:47
10F:→ kerash:第一筆資料長度大約是 39 萬字元。 09/10 20:47
11F:→ kerash:另外不用寫在parser的意思是? 09/10 20:47
12F:→ bibo9901:直接include不就好了 @@ 09/10 21:07
13F:→ kerash:機器不同台,我目前是用寫檔後include沒錯 09/10 21:46
14F:→ chaoms:你寫的規則是~找第一個$字號再來找第一個=號.. 09/10 22:46
15F:→ chaoms:再來找第一個;號...如果這之間有兩個;號..就會你這個問題.. 09/10 22:47
16F:→ chaoms:不用寫parser的意思~你不用特意寫解析程式~來解析你這個檔. 09/10 22:50
17F:→ chaoms:有字串轉PHP變數...PHP變數轉字串的函示可以用.. 09/10 22:52
18F:→ kerash:你指的是eval的話,因為第一筆資料是使用者可輸入的資料 09/10 23:21
19F:→ kerash:所以不好直接轉,才會採取用自訂parse,至於分號我會注意 09/10 23:22
20F:→ tyf99:請用 regex.. 09/10 23:41
21F:→ kerash:regex 確定有長度限制,要修改php.ini才行,我不一定有權限 09/10 23:45
22F:→ kerash:所以暫時不考慮 09/10 23:45
23F:→ tyf99:關 php 啥事... js regex 可三行解決.. 09/11 00:07
24F:→ kerash:= =我在PHP板不問PHP嗎? 我全都是後端執行跟前端無關啊 09/11 00:08
25F:→ tyf99:對不起,看錯 09/11 00:18
26F:→ kerash:js確實有substr啦 囧"... 09/11 00:19
27F:→ tyf99:如果檔案有幾十MB,你可以改用自動機的方式去parse 09/11 00:20
28F:→ kerash:檔案最多控制在1MB而已,所以想說執行能快越好,只是不想產 09/11 00:22
29F:→ kerash:生太多的檔案而已,目前固定會產生一筆了 09/11 00:23
30F:→ tyf99:我說的自動機是 finite state machine,原理跟 regex 很像 09/11 00:24
31F:→ tyf99:finite state 有畫好,基本上就不會 parse 錯,速度夠快了.. 09/11 00:25
32F:→ kerash:沒有特別研究過,不確定適不適合,因為我需求其實很簡單.. 09/11 00:28
33F:→ kerash:關於自動機我再看看好了 09/11 00:28







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP