【问题标题】:Replace text with html tags in it from HTML file用 HTML 文件中的 html 标签替换文本
【发布时间】:2015-06-17 22:36:21
【问题描述】:

我为我的一个客户创建了一个简单的 jquery 插件,它获取他的 HTML 文件,并允许他点击一个区域,并替换其 HTML 内容。

例如,点击一个 div,会提示他在表单中输入新的文本。单击“确定”时,它将发送带有他单击的 div 的 HTML 代码的 ajax 请求。

在 PHP 中,我将检查从 Ajax 发送的所有标签,我想用不同的文本替换它们,然后保存新创建的 HTML 文件。

假设我得到了:

<h1>Welcome to my Website!</h1>

我想改成他之前指定的,

所以

<h1>Welcome to my Website!</h1>

将通过 PHP 更改为

<h2>Hello World!</h1>

在 PHP 中:

<?Php
   ini_set('display_errors', 1);
   error_reporting(E_ALL);
    // get an edited file
    $page = file_get_contents("page.html"));

    $links = json_decode($_GET['links'], true);

    foreach($links as $link) {
        $page = str_replace($link['tag'], $link['new_tag'], $page);
    }
   file_put_contents("test.html", $page);

    print 'DONE';

但有时 str_replace 不会替换标签,如果通过查看接受的数组,一切都与 page.html 中存储的相同。

=======================

编辑

$_GET['link'] 示例

array(2) {
  [0]=>
  array(3) {
    ["tag"]=>
    string(28) "<h1>Welcome to Example!</h1>"
    ["tag_modified"]=>
    string(146) "<h1 class="highlighted" onclick="location.href = 'http://www.example.com'">Welcome to Example!.</h1>"
  }
  [1]=>
  array(3) {
    ["tag"]=>
    string(179) "<p>Some Random Text.</p>"
    ["tag_modified"]=>
    string(293) "<p class="highlighted" onclick="location.href = 'http://www.example.com/'">Some Random Text.</p>"
  }
}

谢谢。

【问题讨论】:

  • 你不能用strip_tags()吗?
  • 这有什么关系?我从 jquery HTML 代码发送以稍后替换。我也想替换标签,而不是剥离它们。即将

    hello

    更改为

    hello

    。通过单击

    hello

    我将此标签发送到 php 以替换为预定义的不同标签。
  • 您不应该使用 ajax 发送整个 html 标记。只需发送元素的 .text 或输入标签的 .val 即可。您是否也需要发送 html 标签?
  • 是的,当然,因为我在替换它们时将 HTML 属性添加到这些标签中。我想用不同的代码块替换整个代码块。例如,向 标签添加 onclick 属性

标签: javascript php jquery html


【解决方案1】:

不要使用str_replace 函数,而是尝试使用preg_replace 函数。 http://php.net/manual/en/function.preg-replace.php此链接可能会有所帮助。

【讨论】:

    【解决方案2】:

    如果您只想更改表单中的文本并假设您使用的是 jQuery,但不允许在文本字段中使用任何 HTML,那么您可以在通过 ajax 提交之前在页面中执行类似的操作:

    function stripHtml(str) {
      return $('<div></div>').html(str).text();
    }
    

    【讨论】:

    • 我不想更改文本,整块代码
    • 这不会改变文本,只是去除 HTML
    • 再一次,我想更改一整段代码,包括 HTML。
    • 是的,包含文本和其他 html 标记的 HTML 标记。用户在一个区域上单击客户端,我使用 jquery (e.target) 获取它并使用 ajax 发送它。
    • 在不了解插件的更多功能的情况下,我建议您只需让插件在 UI 中操作 HTML,然后将已更改的整个 HTML 块传递回服务器并简单地将其替换为新区块。无需以这种方式迭代任何代码。
    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2016-03-29
    • 2014-08-13
    相关资源
    最近更新 更多