众所周知,XML文档中不允许使用某些字符范围.我知道过滤掉这些字符的解决方案(如[1],[2]).
按照不要重复自己的原则,我宁愿在一个中心点实现其中一个解决方案 - 现在,我必须在输入之前清理任何可能不安全的文本lxml.有没有办法实现这一点,例如通过继承lxml过滤器类,捕获一些异常或设置配置开关?
编辑:希望有点澄清这个问题,这里是一个示例代码:
from lxml import etree
root = etree.Element("root")
root.text = u'\uffff'
root.text += u'\ud800'
print(etree.tostring(root))
root.text += '\x02'.decode("utf-8")
Run Code Online (Sandbox Code Playgroud)
执行此操作会得到结果
<root>�</root>
Traceback (most recent call last):
File "[…]", line 9, in <module>
root.text += u'\u0002'
File "lxml.etree.pyx", line 953, in lxml.etree._Element.text.__set__ (src/lxml/lxml.etree.c:44956)
File "apihelpers.pxi", line 677, in lxml.etree._setNodeText (src/lxml/lxml.etree.c:20273)
File "apihelpers.pxi", line 1395, in lxml.etree._utf8 (src/lxml/lxml.etree.c:26485)
ValueError: All strings must be XML compatible: Unicode or ASCII, no …Run Code Online (Sandbox Code Playgroud) 我正在编写一个消耗一些XHTML的小屏幕抓取应用程序 - 不用说XHTML无效:&符号不会被转义为&.
我正在使用Android XmlPullParser,它会在错误编码的值上显示以下错误:
org.xmlpull.v1.XmlPullParserException: unterminated entity ref
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'>
@55:134 in java.io.InputStreamReader@43b1ef70)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我考虑过以下解决方案:
InputStream另一个替换为带有实体引用的&符号哪些可能更成功?
我有一个带varchar列的表,我想找到与某个数字匹配的值.因此,我们可以说该列包含以下条目(现实生活中除了数百万行):
123456789012
2345678
3456
23 45
713?2
00123456789012
Run Code Online (Sandbox Code Playgroud)
所以我决定我想要所有数字上的行123456789012写一个看起来像这样的语句:
SELECT * FROM MyTable WHERE CAST(MyColumn as bigint) = 123456789012
Run Code Online (Sandbox Code Playgroud)
它应该返回第一行和最后一行,但整个查询会爆炸,因为它无法将"23 45"和"713?2"转换为bigint.
是否有另一种方法可以进行转换,为无法转换的值返回NULL?
更新:
这个问题仍然存在,尽管它与以前不完全相同.下面是输入内容,输出内容和输出内容的示例
输入的一个例子:
&lt;p&gt;&lt;span style=&quot;font-size: medium&quot;&gt;Product description text&lt;/span&gt;&lt;/p&gt;
Run Code Online (Sandbox Code Playgroud)
当前输出:
<p><span style="font-size: medium">Product description text</span></p>
Run Code Online (Sandbox Code Playgroud)
预期产量:
<p><span style="font-size: medium">Product description text</span></p>
Run Code Online (Sandbox Code Playgroud)
.
使用CDATA有帮助,因为它允许我输入'<'但是如上面的输出所示,即使使用disable-output-escaping,它在输出中也发生了变化
.
.
原始问题:
我得到的错误是"'<',十六进制值0x3C,是一个无效的属性字符"
我要做的是替换所有出现的< 和> 分别用<和>.
为了保持尽可能简单,这里只是LT的代码:
<xsl:variable name="lt">
<xsl:text><</xsl:text>
</xsl:variable>
<xsl:variable name="lthex">&lt;</xsl:variable>
<xsl:copy-of select="ew:replacestring(products_description/node(),$lthex,$lt)"/>
Run Code Online (Sandbox Code Playgroud)
我尝试过各种各样的东西代替文本,例如价值等.
我知道代码格式和链接到它的vb代码没有任何问题,因为我多次使用它来替换和输出其他地方
这个问题虽然是我希望<和>字面上输出,而不是浏览器随后看到并改变的代码
.
如果您需要更多信息,请问(我很难解释这个问题)
任何帮助将不胜感激
所以我有一些XML:
<key>my tag</key><value>my tag value and my invalid Character</Value>
和XMLReader:
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
while (reader.Read())
{
//do my thing
}
}
Run Code Online (Sandbox Code Playgroud)
我已经从这里实现了CleanInvalidCharacters方法,但由于""尚未编码,因此不会被删除.
读者会抛出错误.阅读(); 有异常的行:
十六进制值0x0B,是无效字符.
我正在编写一个程序,它将一个字符串作为输入,并检查其中的元素是否有效.我希望我的输入只包含较低的字符和句点,感叹号和空格,而不是空字符串.如果用户输入空字符串或无效字符,则会要求他们再次输入字符串:
我知道如何检查字符串中的字符.我用这种方法
alpha ="abcdefghijklmnopqrstuvwxyz"
message= input("Enter message: ")
for i in message:
if i in alpha:
print i
Run Code Online (Sandbox Code Playgroud)
通常我会使用下面的方法来检查无效输入,但如果我想检查字符串中的字符,它将不适用于这种情况.我只能使用它来检查消息是否为空
textOK = False
while not textOK:
message= input(prompt)
if len(message) == 0:
print("Message is empty)
else:
textOK= True
Run Code Online (Sandbox Code Playgroud)
这将在用户输入空字符串时重新提示.我不知道如何结合这两种方法.简而言之,我想检查我的输入是否只包含较低的字母,句号,感叹号和空格.如果它包含其他特殊字符或数字或者是空字符串,则会提示用户再次输入该消息.请帮忙!!
我最近在我的网站上实现了 ELMAH,我注意到我们经常收到“Base-64 字符串中的无效字符”错误。我自己从未触发过它,我们的用户也没有抱怨过它,所以我不知道发生了什么。从我所能找到的一点来看,视图状态似乎可能变得太大或被损坏或其他什么。有谁知道造成这种情况的原因以及如何预防?以下是我认为 YSOD 中的相关内容。
[FormatException: Invalid character in a Base-64 string.]
[ViewStateException: Invalid viewstate.
[HttpException (0x80004005): The client disconnected.]
Run Code Online (Sandbox Code Playgroud)
我可以对这些错误做些什么,还是应该在 ELMAH 中过滤它们?
我正在制作检查字符串(电子邮件)的算法 - 就像"电子邮件地址有效",但它们是规则.电子邮件的第一部分必须是包含1-8个字符的字符串(可以包含字母,数字,下划线[_] ...电子邮件包含的所有部分)以及@电子邮件的第二部分之后拥有1-12个字符的字符串(也包含所有合法表达式),它必须以顶级域名.com结尾
email = raw_input ("Enter the e-mail address:")
length = len (email)
if length > 20
print "Address is too long"
elif lenght < 7:
print "Address is too short"
if not email.endswith (".com"):
print "Address doesn't contain correct domain ending"
try:
first_part = len (splitting[0])
second_part = len(splitting[1])
account = splitting[0]
domain = splitting[1]
list = "abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."
for c in account:
if c not in list:
print "Invalid char", "->", c,"<-", "in account name of e-mail" …Run Code Online (Sandbox Code Playgroud) 我有一个 Git 存储库,我不小心在 4 次提交前推送了一个文件,该文件位于(相对于存储库根文件夹的路径):/Core/C:/testoutput/agwqe1s.xml
我在我的 Linux 机器上做了这个,所以创建的实际文件没有任何问题。问题是当我回到我的 Windows 机器时,我无法切换到包含此文件的分支,因为 Windows 只是拒绝创建这样的文件夹。好的,没问题,我在 Linux 端删除了文件并提交了它,但即使很困难它也不起作用。Git 仍然试图在我的 Windows 机器上创建这个非法文件,我不知道该怎么做。
我知道我可以从头开始重新制作 repo,但后来我丢失了整个提交日志历史记录,我想避免这种情况。我在这里有什么选择?
我是 C# 新手。假设我有一个这样的字符串:
\n\nstring test = \'yes/, I~ know# there@ are% invalid\xc2\xa3 characters$ in& this* string^";\nRun Code Online (Sandbox Code Playgroud)\n\n如果我想删除一个无效符号,我会这样做:
\n\nif (test.Contains(\'/\')) \n{ \n test = test.Replace("/","");\n} \nRun Code Online (Sandbox Code Playgroud)\n\n但是有没有办法我可以使用符号列表作为 and 的Contains参数Replace函数的参数,而不是逐个删除符号?