标题:求:解析html entity的VFP优雅算法。
只看楼主
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
结帖率:100%
 问题点数:0 回复次数:8 
求:解析html entity的VFP优雅算法。
*--------------------
源字符串(html entity):
这是一个例子,this is a example

目标字符串(UTF16-LE或UTF-8):
这是一个例子,this is a example
*--------------------

算法本身其实也不复杂。唯,html entity的英文字符其实是ANSI(能兼容UTF-8),故而将目标字符串统一转换为UTF-8,可能会更方便、也更合理一些。

因源字符是Unicode BE的十进制值,故而整个算法需执行几次转换:
1、遍历源字符串,STREXTRACT( );
2、循环,逐字判断中英文,若英文,直接chr( );
3、若中文:UTF16-BE数值 TO UTF16-LE数值;
4、统一转为UTF-8。

网上抄的Python,只需一个如此简单的函数:
def convHTML(string):
    hexL = [hex(int(c.strip('&#;'))).replace('0x', '') for c in string.split(';&#')]
    return bytes.fromhex(' '.join(hexL)).decode('utf-16be')

故而,有些好奇,VFP能否逼出一个类似的特别优雅的转换函数?

搜索更多相关主题的帖子: 转换 算法 VFP 字符串 html 
2022-12-10 10:03
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
以我的能力,只能做到这个地步
程序代码:
? convHTML("这是一个例子,this is a exampl&#101")

Function convHTML(tcSrc)
    Local cRet, cc
    Local array aTemp[1]
    
    m.cRet = ''
    If ALines(aTemp, m.tcSrc, 1+4, ';','&#') > 0
        For each m.cc in m.aTemp
            m.cc = Right(Transform(Evaluate(m.cc), '@0'), 4)
            m.cRet = m.cRet + Strconv(Strconv(Right(m.cc,2)+Left(m.cc,2), 16), 6)
        EndFor
    EndIf
    Return m.cRet
EndFunc



[此贴子已经被作者于2022-12-10 11:47编辑过]

2022-12-10 11:24
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
以下是引用csyx在2022-12-10 11:24:32的发言:
以我的能力,只能做到这个地步


抱歉,此函数可能存在一点问题:

Html Entity用在网页代码之中,其实最主要目的,是拿来生成“极生僻字”,即:在UCS双字节编码范围之外(必然也是在ANSI双字节编码范围之外)的多字节UTF-16编码;这些偏僻字编码的字符,STRCONV(x, 6)只会得到“??”。更稳妥的处置方式是 Y = STRCONV(x, 10),然后将结果strtofile(Y, "UTF8.txt"),或直接显示到Unicode控件中。

其次,Html Entity编码,最常见的形式,是穿插在正常的UTF-8字符中间,而非通篇都是&#...;,比方说:

这是Html Entity编码最常用的形式:☳为震,☴为巽,上震下巽就是䷟恒卦。



[此贴子已经被作者于2022-12-10 12:05编辑过]

2022-12-10 11:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用cssnet在2022-12-10 11:48:43的发言:

这是Html Entity编码最常用的形式:☳为震,☴为巽,上震下巽就是䷟恒卦。

没看明
&#是表达web的uncode转义字符
2022-12-10 14:46
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
原来是算挂的
2022-12-10 14:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
按 “&#”....“;” 抽出,其中的 .... 是十进制数字就反转义替换,注意数值的有效范围
 

[此贴子已经被作者于2022-12-10 14:57编辑过]

2022-12-10 14:56
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
以下是引用吹水佬在2022-12-10 14:48:24的发言:

原来是算挂的


失礼失礼,那是随手从网上复制/粘贴的示例,见笑啦。
2022-12-10 15:08
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
以下是引用cssnet在2022-12-10 11:48:43的发言:
抱歉,此函数可能存在一点问题:
这是Html Entity编码最常用的形式:☳为震,☴为巽,上震下巽就是䷟恒卦。


1. 你一楼的需求就不明确,没说只有生僻字才用 Html Entity 编码。没有哪个网页会将英文字符也写成这种编码格式
2. 如果是用于网页,当没有指定中文(gbk, gb2312)编码的情况下,所有中文都要用 Html Entity 编码来表示,而非仅生僻字
3. 如果是想将 Html Entity 编码的字符显示成解码后的字符,一楼的 py 代码也不一定正确,我没用过 py 无法验证
   a. 网页中不光有 &#NNNNN 形式的 Html Entity,很多基本的 ascii 字符都需要,例如 < 就要写成 &lt,空格写 &nbsp,...
   b. 随便找一个其他的生僻字,例如:𠁰, Html Entity = &#131184;
   你试试一楼的 py 代码能否正确解码?


[此贴子已经被作者于2022-12-10 22:38编辑过]

2022-12-10 22:37
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
先生批评得极是!
确实,经常会遇到的是lt、gt、nbsp……,若想完整解析Html Entity,就不得不照顾到一长串的列表。
Html Entity一般常用于HTML网页当中。
HTML网页一般常用UTF-8编码。
近年来的HTML网页,一般情况下,极少极少再会用gbk、gb2312了。
故而会有"Html Entity" To "UTF-8"相互转换的想法。
不知有没留意到,本论坛的php程序恰恰是“Html Entity敏感”的,发帖时甚至难以正常显示Html Entity源编码。我输入:
这是Html Entity编码最常用的形式:&#9779;为震,&#9780;为巽,上震下巽就是&#19935;恒卦。

你一引用,就会自动解析为:
这是Html Entity编码最常用的形式:☳为震,☴为巽,上震下巽就是䷟恒卦。
这也间接证明了Html Entity编码的常用性、易用性以及普及性。

以下是引用csyx在2022-12-10 22:37:25的发言:
1. 你一楼的需求就不明确,没说只有生僻字才用 Html Entity 编码。没有哪个网页会将英文字符也写成这种编码格式
2. 如果是用于网页,当没有指定中文(gbk, gb2312)编码的情况下,所有中文都要用 Html Entity 编码来表示,而非仅生僻字
3. 如果是想将 Html Entity 编码的字符显示成解码后的字符,一楼的 py 代码也不一定正确,我没用过 py 无法验证
   a. 网页中不光有 &#NNNNN 形式的 Html Entity,很多基本的 ascii 字符都需要,例如 < 就要写成 <,空格写  ,...
   b. 随便找一个其他的生僻字,例如:𠁰, Html Entity = &#131184;
   你试试一楼的 py 代码能否正确解码?

2022-12-11 10:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510913-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.208907 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved