iT邦幫忙

1

請問網址中的變數是中文,轉貼至Line後,中文開始無法帶入連結中,有那些解決方案。

com 2019-01-13 18:34:591934 瀏覽

我們教學需要貼有【中文】是變數的網址,該變數提供PHP GET。
利如http://www.xn.com.tw/?t=中文
我有使用rawurlencode()轉碼,但是轉貼至Line後,從中文字開始,無法帶入連結中。
最新版本的Line無此問題,但是較舊,或是Line@都無法判斷中文字為連結的一部份。
試過下面幾點克服方案:(目前使用idn_to_ascii()解決。)
1.第三方短網址。
2.將中文存入資料庫中,使用數字變數對應資料庫取得中文。
3.使用explode("%",變數)將%號後面的數字取出,讀取時,每兩個字塞入%號還原。
4.使用idn_to_ascii()。
因為第4點IDN需要特別裝PHP擴展,想詢問各位是否有其他更好的方案?
----2019-01-14-update-----
淺水員您好~謝謝您指正跨網域問題,我今天有修改相對位置。
不過【利如】提供的網址,只是舉例,並不是要貼至Line的網址,我補充一下您回覆
【給我自己的機器人都能正常抓到並回傳連結】
我自己也是如此,但是收到留言的對方,有些版本在t=之後就不會成為連結的一部份,明天我去工程部借手機再截圖補上來,謝謝您。
----2019-01-15-update-----
下圖是我傳出去,中文字包含在連結中。
https://ithelp.ithome.com.tw/upload/images/20190115/20111413VtjWj4DNUw.jpg
下圖是我使用Line@接收,在中文部份,變成不屬於連結的一部份。
https://ithelp.ithome.com.tw/upload/images/20190115/20111413EDLtrzDKxs.jpg

看更多先前的討論...收起先前的討論...
註冊單 iT邦新手 4 級 ‧ 2019-01-13 19:44:27 檢舉
很少人會用中文網域大多人都申請英文
淺水員 iT邦新手 3 級 ‧ 2019-01-14 01:40:17 檢舉
我沒有舊版的LINE,但是我貼
http://www.xn.com.tw/?t=中文
或是
http://www.xn.com.tw/?t=%E4%B8%AD%E6%96%87
給我自己的機器人都能正常抓到並回傳連結
(如果連結前後還有文字,也許需要留有空格,以供辨識)
淺水員 iT邦新手 3 級 ‧ 2019-01-14 01:58:02 檢舉
回報一下:我用電腦看該網頁,在選單「聯絡我們」的右邊,好像有用到 U+F002 這個字元,這好像是私人使用區的字元,在我的電腦是無法顯示的。
另外下面二維條碼的左邊也是如此。
-----上述問題已於2019/1/14修正-----
com iT邦新手 5 級 ‧ 2019-01-14 22:29:56 檢舉
淺水員您好~謝謝您指正跨網域問題,我今天有修改相對位置。
不過【利如】提供的網址,只是舉例,並不是要貼至Line的網址,我補充一下您回覆
【給我自己的機器人都能正常抓到並回傳連結】
我自己也是如此,但是收到留言的對方,有些版本在t=之後就不會成為連結的一部份,明天我去工程部借手機再截圖補上來,謝謝您。

1 個回答

0
淺水員
iT邦新手 3 級 ‧ 2019-01-19 01:35:32
最佳解答

因為沉下去了所以我沒注意到你有改。
我覺得這應該是LINE APP本身的問題,所以只能用非中文字的方法處理。

這邊提供另一個用英數字傳遞中文的方式:BASE64編碼
這並不需要用到資料庫、第三方短網址、或是安裝比較特別的 extension
其實 base64 跟「百分比編碼」意思差不多
但是看起來的網址會比較短

一般中文:http://www.xn.com.tw/?t=中文
百分比編碼:http://www.xn.com.tw/?t=%E4%B8%AD%E6%96%87
base64:http://www.xn.com.tw/?t=5Lit5paH

使用 base64 編碼有以下要注意:

  1. 後端需要再把 base64 轉回中文以找到原來的網址
  2. 由於網址的+/=這三個符號有特殊意義,所以要用base64的變體,參考:https://zh.wikipedia.org/wiki/Base64#在URL中的应用
  3. 以上是建立在你的 t 參數至少含有一個中文字,如果存在整串都是英數的參數,那可能比較難判斷是否為 base64

關於網址列中的 base64 的轉換可以參考:http://php.net/manual/en/function.base64-encode.php#103849

com iT邦新手 5 級 ‧ 2019-01-22 10:10:41 檢舉

感謝您,base64_encode()方案比idn_to_ascii()好用,謝謝。

我要發表回答

立即登入回答