相关疑难解决方法(0)

如何防止 DOMDocument 转换 转为统一码

我正在尝试获取DOMElementPHP 中 a 的内部 HTML。标记示例:

<div>...</div>
<div id="target"><p>Here's some &nbsp; <em>funny</em> &nbsp; text</p></div>
<div>...</div>
<div>...</div>
Run Code Online (Sandbox Code Playgroud)

将上面的字符串输入变量中$html,我正在做:

$doc = new DOMDocument();
@$doc->loadHTML("<html><body>$html</body></html>");
$node = $doc->getElementById('target')
$markup = '';
foreach ($node->childNodes as $child) {
  $markup .= $child->ownerDocument->saveXML($child);
}
Run Code Online (Sandbox Code Playgroud)

生成的$markup字符串如下所示(转换为 JSON 以显示不可见字符):

"<p>Here's some \u00a0 <em>funny<\/em> \u00a0 text<\/p>"
Run Code Online (Sandbox Code Playgroud)

所有&nbsp;字符都已转换为 Unicode 不间断空格,这会破坏我的应用程序。

在我的理想世界中,有一种方法可以按原样检索目标 div 内的原始 HTML 字符串,而无需DomDocument对其执行任何操作。这似乎不可能,所以下一个最好的办法是以某种方式关闭此字符转换。到目前为止我已经尝试过:

  • 设置$doc->substituteEntities = false;没有结果。更改为true也没有帮助。
  • 切换$doc->preserveWhiteSpace方式均无变化
  • 更改saveXMLsaveHTML. …

php domdocument

3
推荐指数
1
解决办法
1226
查看次数

PHP日语字符串设置为?

我有一个带有一个简单echo函数的PHP文件:

echo '????????????';
Run Code Online (Sandbox Code Playgroud)

但当我访问该页面时,我得到了这个:

????????????
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?我的页面编码设置为UTF-8,我知道,因为我使用的所有浏览器都这样说.我也在echo函数之前做这个:

mb_internal_encoding('UTF-8');
Run Code Online (Sandbox Code Playgroud)

这是做什么的?这对我有帮助吗?我只需要能够回显一个静态的日语字符串.

谢谢!

php string utf-8 echo

2
推荐指数
1
解决办法
2735
查看次数

"Â"字符显示而不是"&nbsp;"

我发现这个帖子很好地描述了我的问题,这个答案完全描述了我的问题.

非中断空格字符是字节0xA0是ISO-8859-1; 当编码为UTF-8时,它是0xC2,0xA0,如果您(错误地)将其视为ISO-8859-1,则表示为"Â ".这包括一个尾随......

但是,我设法将我的问题跟踪到我用来在div中包装图像标签的函数.

function img_format($str)
{
    $doc = new DOMDocument();
    @$doc->loadHTML($str);     // <-- Bonus points for the explaination of the @

    // $tags object
    $tags = $doc->getElementsByTagName('img');

    foreach ($tags as $tag) {

        $div = $doc->createElement('div');
        $div->setAttribute('class','inner-copy');
        $tag->parentNode->insertBefore($div, $tag);
        $div->appendChild($tag);

        $tag->setAttribute('class', 'inner-img');
    }

    $str = $doc->saveHTML();

    return $str;
}
Run Code Online (Sandbox Code Playgroud)

很简单,我如何在此功能中解决此问题?

我理解使用;

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)

将解决这个问题,但显然我在功能本身内忽略了一些东西.

我试过了;

$dom->validateOnParse = true;
Run Code Online (Sandbox Code Playgroud)

无济于事.(我不知道那是怎么回事)

php dom domdocument

1
推荐指数
1
解决办法
2946
查看次数

脚本标签中的 Symfony dom-crawler 字符串转换为 UTF8

我有这个 HTML 内容:

<div>??</div>
<script charset="utf-8" type="text/javascript">
    function drawCharts(){
        console.log('??');
    }
</script>
Run Code Online (Sandbox Code Playgroud)

当我使用 Symfony 的 dom-crawler 时,文本被 HTML 编码。我怎样才能防止这种情况?$crawler->html()结果:

<div>??</div>
<script>
    function drawCharts(){
        console.log('&#27979;&#35797;');
    }
Run Code Online (Sandbox Code Playgroud)

php utf-8 symfony domcrawler

0
推荐指数
1
解决办法
1852
查看次数

标签 统计

php ×4

domdocument ×2

utf-8 ×2

dom ×1

domcrawler ×1

echo ×1

string ×1

symfony ×1