将utf8转换为Perl中的html实体

时间:2018-02-14 10:13:09

标签: perl

我继承了一个可怕的网站,所以请原谅这个问题:)我们需要将任何非标准字符转换为HTML实体,而不是将网站升级为完全UTF8:

&#ord_value;

这个测试脚本为一个charachter执行此操作:

$foo =~ s/(\x{ed})/to_ord($1)/e;

sub to_ord {
    return ("&#" . ord($_[0]). ";")
}

我需要做的是,在比ord 127更大的任何事情上触发这个。有一种简单的方法可以做到这一点吗?我已经研究过角色类但看不到任何适合该法案的内容

FWIW ,我让他们意识到他们当前存储数据的方式非常糟糕,并且会导致尝试搜索HTML实体的人出现问题 - 但这是我无法控制的。

更新:这有效,但我确信必须有更好的方法 - 所以如果您有任何建议,请分享:)

s/([^a-z \.,-_0-9])/to_ord($1)/eg

1 个答案:

答案 0 :(得分:2)

 function sumItems(array) {

  let sum = 0;
  array.forEach((item) => {
    if(Array.isArray(item)) {
     sum += sumItems(item);
    } else {
    sum += item;
    }
  })
  return sum;
}

模式的选择:

  • import socket import sys # connect to server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 3000)) # request file s.send("request") f = open("test.png", "wb") l = s.recv(1024) while(l): f.write(l) l = s.recv(1024) f.close() print("Done receiving") s.shutdown(socket.SHUT_WR) s.close() # do something with the file # ... # send new file back s.connect(("localhost",3000)) # This will reconnect to the server and you should see the echo s.send("validate") s.send("Hello, World") # dummy input just to see if it's working s.close() # 's' has already been closed, but I don't know how I should make another request after 's.shutdown(...)' (逃避非ASCII。)
  • s/(...)/ ... /eg; (转义非ASCII和控制字符。)

替换表达式的选择:

  • [^\x00-\x21\x23-\x25\x28-\x3B\x3D\x3F-\x7F]
  • [^\x09\x0A\x0D\x20-\x21\x23-\x25\x28-\x3B\x3D\x3F-\x7E](额外的CPU,但带宽减少。)

例如,

"&#".ord($1).";"