如何从 php exec 中转义 XML 的特殊字符
How to escape XML's special characters from php exec
我一般都是通过网上搜索自己找到问题的答案,但是对于这个问题我已经没有任何想法了...
我正在通过 php exec 命令将内容添加到 XML 文件(这是几个 Go)。
我必须这样做,因为我需要一个 XML 来导入我的 Solr 集合中的数据
<?php
$cmd = "echo '\b' > /windowsShare/solr_update_20150728.xml";
var_dump($cmd);
//exec($cmd);
passthru($cmd);
奇怪的行为是,如果我 "manually" 运行 输出,我的 XML 是有效的...
但是不知何故,当我通过 php 执行它时,它插入了一些特殊字符(无效字符)。
例如:\b 在黑色背景上插入一个 "BS"(在 Notepad++ 中)
我已经试过了:
htmlspecialchars (addSlashes('\b'), ENT_XML1)
求求你帮忙:)
编辑:简单地添加一个“\”是这个特定'\b'字符的解决方案,但我想要一个通用的解决方案:
例如:$txt = "(\b €......或d≥3";
在Notepad++中显示为:
(\b €....... 或 dâ¥3
注意:我感觉这是一个编码问题...(当我将编码更改为 UTF8 时它显示得很好)
您想在 xml 中添加文字 \
和 b
字符吗?由于您使用的是 "
引号字符串,因此 \b
被视为退格键。你必须双重转义:
$cmd = "echo '\b' > /windowsShare/solr_update_20150728.xml";
^^
您可以切换到使用 '
引号字符串,其中 \b
没有特殊含义,但您还必须转义回显引号:
$cmd = 'echo \'\b\' > /windowsShare/solr_update_20150728.xml';
正如我在编辑中所说,这是一个编码问题。
我正在插入 '< ?xml version="1.0" encoding="ISO-8859-1" ?>' 到 XML.
因此 SQL 数据 (UTF-8) 正在转换为另一种格式。
现在,我插入 < ?xml version="1.0" encoding="UTF-8" ?>.
而且XML和SQL的数据是一样的
我一般都是通过网上搜索自己找到问题的答案,但是对于这个问题我已经没有任何想法了...
我正在通过 php exec 命令将内容添加到 XML 文件(这是几个 Go)。 我必须这样做,因为我需要一个 XML 来导入我的 Solr 集合中的数据
<?php
$cmd = "echo '\b' > /windowsShare/solr_update_20150728.xml";
var_dump($cmd);
//exec($cmd);
passthru($cmd);
奇怪的行为是,如果我 "manually" 运行 输出,我的 XML 是有效的... 但是不知何故,当我通过 php 执行它时,它插入了一些特殊字符(无效字符)。
例如:\b 在黑色背景上插入一个 "BS"(在 Notepad++ 中)
我已经试过了: htmlspecialchars (addSlashes('\b'), ENT_XML1)
求求你帮忙:)
编辑:简单地添加一个“\”是这个特定'\b'字符的解决方案,但我想要一个通用的解决方案:
例如:$txt = "(\b €......或d≥3";
在Notepad++中显示为:
(\b €....... 或 dâ¥3
注意:我感觉这是一个编码问题...(当我将编码更改为 UTF8 时它显示得很好)
您想在 xml 中添加文字 \
和 b
字符吗?由于您使用的是 "
引号字符串,因此 \b
被视为退格键。你必须双重转义:
$cmd = "echo '\b' > /windowsShare/solr_update_20150728.xml";
^^
您可以切换到使用 '
引号字符串,其中 \b
没有特殊含义,但您还必须转义回显引号:
$cmd = 'echo \'\b\' > /windowsShare/solr_update_20150728.xml';
正如我在编辑中所说,这是一个编码问题。 我正在插入 '< ?xml version="1.0" encoding="ISO-8859-1" ?>' 到 XML.
因此 SQL 数据 (UTF-8) 正在转换为另一种格式。 现在,我插入 < ?xml version="1.0" encoding="UTF-8" ?>.
而且XML和SQL的数据是一样的